类
定义方法:
class类名:
...
类也是对象,它是能创建实例的对象
类变量
类变量是类的属性,此属性属于类,不属于此类的实例
作用:
通常用来存储该类创建的对象的共有属性
说明:
类变量可以通过该类直接访问
类变量可以通过类的实例直接访问(取值)
类变量可以通过此类的对象__class__属性间接访问
class human:
total_count=0 #创建一个类变量
print('human.total=',human.total_count)
human.total_count+=100
print(human.total_count) #100
human.class_var=200#创建第二个类变量
print(dir(human))
class human:
total_count=0 #创建一个类变量
h1=human()#创建一个实例
print(h1.total_count)#0 h1没有属性访问类变量
h1.total_count=100 #创建实例变量
print(h1.total_count)#100
class human:
total_count=0 #创建一个类变量
def __init__(self):
self.__class__.total_count+=1
h1=human()#创建一个实例
l=[]
l.append(human())
l.append(human())
l.append(human)
print(human.total_count,'个对象')#3
实例方法和类方法都是类的变量(类变量)
类的文档字符串:
类内第一个没有赋值给任何变量的字符串为类的文档字符串
类的文档字符串绑定在类的__doc__属性上
示例:
class dog:
'''dog类的文档字符串'''
def infos(self):
'''这是dog类内infos方法的文档字符串'''
>>>help(dog)
>>>print(dog.__doc__)
类的__slots__列表:
作用:
限定一个类创建的实例只能在固定的属性(实际变量)
不允许对象添加此列表以外的实例属性
访问用户因错写属性名而发生程序错误
说明:
__slots__属性是一个列表,列表的值是字符串
含有__slots__属性的类所创建的实例对象没有
__dict__属性,即此实例不用字典来存储实例属性
# class human:
# def __init__(self,n,a):
# self.name=n
# self.age=a
# def show__info(self):
# print(self.name,'今年',self.age,'岁')
# h1=human('tarena',15)
# h1.show__info() #15岁
# h1.Age=16 #大写Age
# h1.show__info()#15岁
# print(h1.__dict__)#{'name': 'tarena', 'age': 15, 'Age': 16}
class human:
#此__slots__列表让human创建的对象只允许有name和age属性
__slots__={'name','age'}#############__slots__
def __init__(self,n,a):
self.name=n
self.age=a
def show__info(self):
print(self.name,'今年',self.age,'岁')
h1=human('tarena',15)
h1.show__info() #15岁
# h1.Age=16 #此处报错,因为此属性不在__slots__列表内
h1.show__info()#15岁
类方法@classmethod
类方法是用于描述类的行为的放法,此方法属于类,不属于该类创建的对象
说明:
1.类方法需要使用@classmethod装饰器定义
2.类方法至少有一个形参,第一个形参用于绑定类,约定写为‘cls’
3.类和该类的实例都可以调用类方法
4.类方法不能访问此类创建的对象的实例属性
class a:
v=100 #类变量
@classmethod
def get_v(cls): #cls-->class
'''这是一个类方法,用来获取类变量v的值'''
return cls.v
@classmethod
def set_v(cls,b):
cls.v=b
print(a.get_v())#100获取类变量v的值
a.set_v(200)
print(a.get_v())#200
A=a()
#类和该类的实例都可以调用类方法
print(A.get_v())# 200 该类的实例可以调用类方法
静态方法@staticmethod
静态方法是定义在类内的函数,此函数的作用域是类的内部
说明:
静态方法需要使用@staticmethod装饰器定义
2.静态方法与普通函数定义相同,不需要传入self和cls参数
3.静态方法只能凭借该类或类的实例调用
4.静态方法不能访问类变量和实例变量
**#此实例示意静态方法的定义的使用**
class A:
@staticmethod
def myadd(a,b):
return a+b
print(A.myadd(100,200))# 300调用静态方法
a=A()
print(a.myadd(30,40)) #70
函数,静态方法,类方法,实例方法
共性:
语句块,实现相应的功能