类的属性引用_函数体 基础问题
这个people类的属性引用a = people.spaek返回了一个函数对象speak(),()中参数是self.
为什么传入类名people后会有图中所示的结果?
实例属性self.name和self.age的值为什么就和类属性name,age一样了?
首先你a(people)调用了a函数,将people传了进去
此时self = people
所以,你打印self.name和self.age实际上是打印people.name和people.age
而people.name='human'
people.age=0
所以打印了human和0 临时号 发表于 2022-6-21 16:36
首先你a(people)调用了a函数,将people传了进去
此时self = people
所以,你打印self.name和self.age实际上 ...
那也就是说
a()的参数只能是 传入一个 类属性包含name , age 的类
比如
class people1:
name = 'fgae'
age=314
a(people1)
对么? 本帖最后由 临时号 于 2022-6-21 16:50 编辑
产品执行码暂缺 发表于 2022-6-21 16:42
那也就是说
a()的参数只能是 传入一个 类属性包含name , age 的类
比如
不对
你的people类中还有一个__init__函数,忘了吗?
这个__init__函数就是用来做初始化的
比如,你可以这么写
b = people('xxx',18,30)
a(b)
这里你直接可以用people这个类名调用__init__函数,然后进行初始化
然后,你再a(b) 临时号 发表于 2022-6-21 16:47
不对
你的people类中还有一个__init__函数,忘了吗?
这个__init__函数就是用来做初始化的
您说这个创建实例对象的方法我明白
我是说如果采用属性引用的方式,返回一个类中的函数对象 a = people.speak
那么这个函数对象a想要作为函数体执行,给它的参数就得是 一个包含对应属性的类(可以是其他的新类)
比如
class people1:
name = 'fgae'
age=314
def __init__(self,nn,aa):
self.name = nn
self.age = aa
def ss(self):
print(self.name,self.age)
class people:
name = 'xxx'
age = 31
a = people1.ss
a(people)
结果是 xxx 31
实在不动,你就这样看
a = people1.ss
a是一个函数,函数接受一个参数。这个参数必须要有name属性,和age属性。 Stubborn 发表于 2022-6-22 13:50
实在不动,你就这样看
a = people1.ss
a是一个函数,函数接受一个参数。这个参数必须要有name属性,和age ...
嗯嗯 是的 就是得传入一个参数,这个参数能匹配上ss函数的参数要求:具有name,age属性
感谢指点
页:
[1]