鱼C论坛

 找回密码
 立即注册
查看: 2119|回复: 6

[已解决]类的属性引用_函数体 基础问题

[复制链接]
发表于 2022-6-21 16:17:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
截屏2022-06-21 下午4.14.09.png

这个people类的属性引用
a = people.spaek
返回了一个函数对象speak(),()中参数是self.
为什么传入类名people后会有图中所示的结果?
实例属性self.name和self.age的值为什么就和类属性name,age一样了?
最佳答案
2022-6-21 16:36:40
首先你a(people)调用了a函数,将people传了进去
此时self = people
所以,你打印self.name和self.age实际上是打印people.name和people.age
而people.name='human'
people.age=0
所以打印了human和0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-21 16:36:40 | 显示全部楼层    本楼为最佳答案   
首先你a(people)调用了a函数,将people传了进去
此时self = people
所以,你打印self.name和self.age实际上是打印people.name和people.age
而people.name='human'
people.age=0
所以打印了human和0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-21 16:42:29 | 显示全部楼层
临时号 发表于 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)
对么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-21 16:47:10 | 显示全部楼层
本帖最后由 临时号 于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-21 16:57:20 | 显示全部楼层
临时号 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-22 13:50:45 | 显示全部楼层
实在不动,你就这样看
a = people1.ss
a是一个函数,函数接受一个参数。这个参数必须要有name属性,和age属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-23 11:07:44 | 显示全部楼层
Stubborn 发表于 2022-6-22 13:50
实在不动,你就这样看
a = people1.ss
a是一个函数,函数接受一个参数。这个参数必须要有name属性,和age ...

嗯嗯 是的 就是得传入一个参数,这个参数能匹配上ss函数的参数要求:具有name,age属性

感谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表