实例属性和类属性,类绑定方法

实例属性和类属性

class Student(object):
    name = "Student"    #类属性
    def __init__(self, name):
        self.name = name    #实例属性

添加类属性有两种方法,一种是 __init__中的self直接添加,或者通过实例绑定

s = Student()
s.score = 99

当实例属性和类属性冲突的时候,实例属性会屏蔽掉类属性.下面的例子很好的说明了它:

class Student(object):
    name = 'Student'
s = Student()
print(s.name)   #Student
s.name = 'Micheal'  #给实例绑定name属性
print(s.name)   #Micheal    实例属性屏蔽掉了类属性
print(Student.name) #Student    但类属性仍然存在
del s.name  #会删除实例的name属性
print(s.name)   #Student

一般都是给一个实例绑定一个属性,但若是绑定方法,可按以下方法设置:

from types import MethodType
class Student(object):
    pass

def set_age(self, age):
    self.age = age

s = Student()
s.set_age = MethodType(set_age, s)  #s.set_age就是设置好了之后的方法名称 
s.set_age(25)   #调用方法
print(s.age)

但是给一个实例创建的方法,无法给别的实例创建属性,会报错

s2= Student()

s2.set_age()

若想绑定了之后所有实例都可以用, 那么可以给类绑定方法

def set_score(self, score):
    self.score = score
Student.set_score = MethodType(set_score, Student)
s.set_score(100)
print(s.score)  #100
s2.set_score(99)
print(s2.score) #99
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值