Python:类

定义方法:
    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
函数,静态方法,类方法,实例方法
共性:
    语句块,实现相应的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值