Python是动态语言
在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言非常具有活力。例如JavaScript便是动态语言,除此之外如PHP 、 Ruby 、 Python 等也都属于动态语言,C 、 C++ 则不属于动态语言!
运行的过程中给对象绑定(添加)属性
这个比较简单,格式:对象.属性 = 值
即可
运行的过程中给类绑定(添加)属性
格式:类名.属性 = 值
即可
运行的过程中给类绑定(添加)方法
#-*- coding:utf-8 -*-
import types
class Person(object):
def __init__(self, newName, newAge):
self.name = newName
self.age = newAge
def eat(self):
print("----%s正在吃----" % self.name)
p = Person("老王", 20)
p.eat()
# 给对象绑定方法
def run(self):
print("----%s正在跑----" % self.name)
p.run = types.MethodType(run, p)
p.run()
# 给Person类绑定类方法
@classmethod
def testClassMethod(cls):
print("class method")
Person.testclass = testClassMethod
Person.testclass()
# 给Person类绑定静态方法
@staticmethod
def testStaticMethod():
print("static method")
Person.teststatic = testStaticMethod
Person.teststatic()
__slots__
动态语言:可以在运行的过程中,修改代码
静态语言:编译器时期就已经确定代码,运行过程中不能修改
如果我们想要限制实例的属性怎么办?⽐如,只允许对Person实例添加name和age属性。
为了达到限制的⽬的,Python允许在定义class的时候,定义⼀个特殊的__slots__变量,来限制该class实例能添加的属性:
In [1]: class Person(object):
...: __slots__ = ("name", "age")
...:
In [2]: p = Person()
In [3]: p.name = "XXX"
In [4]: p.age = 20
In [5]: p.other = "---"
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-dbbcced1d9ea> in <module>()
----> 1 p.other = "---"
AttributeError: 'Person' object has no attribute 'other'
注意
- 使⽤__slots__要注意,__slots__定义的属性仅对当前类实例起作⽤,对继承的⼦类是不起作⽤的