绑定方法与非绑定方法
在类的绑定方法的参数列表中有self参数,非绑定方法的参数列表中没有self参数
使用对象调用非绑定方法会出错,使用类调用绑定方法也会出错
a=A()是实例化对象
a=A 是给类A加了一个别名a,或者说又加了一个标签a`
>>> class A:
def print():
print("sadfad")
def print2(self):
print("adfag")
>>> a=A()
>>> a.print()
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
a.print()
TypeError: print() takes 0 positional arguments but 1 was given
>>> a.print2()
adfag
>>> A.print()
sadfad
>>> A.print2()
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
A.print2()
TypeError: print2() missing 1 required positional argument: 'self'
>>> a=A
>>> a.print()
sadfad
>>> a.print2()
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
a.print2()
TypeError: print2() missing 1 required positional argument: 'self'
类方法
使用@classmethod修饰,可以直接使用A.bar()形式调用,第一个参数为这个类
class Foo:
lang="Java"
def __init__(self):
self.lang="python"
@classmethod
def get_class_attr(cls):
return cls.lang
print(Foo.lang)
r=Foo.get_class_attr() #Foo作为参数cls被自动传入
print("get class attribute:",r)
f=Foo()
print("instance attribute:",f.lang)
装饰器
@property
@staticmethod
@classmethod
__slots__定义的属性略类似于C++/JAVA中的静态变量,但是如果类未对属性赋值,实例可以在自己作用域内定义一个同名属性
此外,使用__slots__之后如果希望对实例新建一个变量,只能对类进行操作,不可以直接对实例进行添加
r表示原始字符串