主要是看了久疤的讨论后,研究了下,貌似发现了一些,分点写写。 前提:父类绑定赋值方法,绑定方法用setattr或者MethodType,实例是子类的实例,父类属性已赋值,实例调用父类方法。 ……………………………… 根据子类是否使用slots分成两种情况:
…………………… 大致六种情况,下面是一些调试代码:
from types import MethodType class Stu2(object): slots = ('time','name','age','setName','getName','setAge','getAge')
def setAge(self,age): self.age = age def getAge(self): return self.age def setName(self,name): self.name = name def getName(self): return self.name
setattr(Stu2,'setAge',setAge) setattr(Stu2,'getAge',getAge) setattr(Stu2,'getName',getName)
setattr(Stu2,'age',-1) Stu2.setName = MethodType(setName,Stu2) setattr(Stu2,'name','HZF') print(Stu2().getAge()) a=Stu2()
print(a.getName()) print(Stu2.name)
class Stu4(Stu2): slots = ('name','age') pass s5 = Stu4()
s5.setName('Juny')
print(Stu2.name==Stu4.name) print(Stu4.name) print(Stu2.name)
s5.setAge(25) print(Stu4.age==Stu2.age) print(Stu2.age) print(Stu4.age) print(s5.age)
醉了,这排版…… 子类有slots分两点,3,4是(1)里的,5,6是(2)里的
不要说排版的事情,是你不会用把……上面不都有插入代码那个选项么,或者用一组```的形式先点插入代码,在中间写入代码,而不是自己写代码,拜托学学markdown语法再来评论
markdown
Sign in to make a reply
yoihikari
主要是看了久疤的讨论后,研究了下,貌似发现了一些,分点写写。 前提:父类绑定赋值方法,绑定方法用setattr或者MethodType,实例是子类的实例,父类属性已赋值,实例调用父类方法。 ……………………………… 根据子类是否使用slots分成两种情况:
…………………… 大致六种情况,下面是一些调试代码:
from types import MethodType class Stu2(object): slots = ('time','name','age','setName','getName','setAge','getAge')
def setAge(self,age): self.age = age def getAge(self): return self.age def setName(self,name): self.name = name def getName(self): return self.name
Stu2.setAge = MethodType(setAge,Stu2)
setattr(Stu2,'setAge',setAge) setattr(Stu2,'getAge',getAge) setattr(Stu2,'getName',getName)
setattr(Stu2,'setName',setName)
setattr(Stu2,'age',-1) Stu2.setName = MethodType(setName,Stu2) setattr(Stu2,'name','HZF') print(Stu2().getAge()) a=Stu2()
print(a.getName()) print(Stu2.name)
class Stu4(Stu2): slots = ('name','age') pass s5 = Stu4()
s5.name='Juny'
s5.setName('Juny')
print(s5.name)
print(Stu2.name==Stu4.name) print(Stu4.name) print(Stu2.name)
s5.setAge(25) print(Stu4.age==Stu2.age) print(Stu2.age) print(Stu4.age) print(s5.age)