鱼C论坛

 找回密码
 立即注册
查看: 807|回复: 4

[已解决]请教类属性的问题

[复制链接]
发表于 2020-6-8 17:59:53 | 显示全部楼层 |阅读模式

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

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

x
class A():
    name = 'Tom'

>>>a = A()
>>>a.name
Tom



class B():
    def __init__(self, name='Tom')
        self.name = name

>>>b = B()
>>>b.name
Tom

都是输出Tom

请问这两个类,加了__init__和不加有什么区别呢,
最佳答案
2020-6-9 10:17:44
通过__init__为每个对象初始化属性,就是实例变量,每创建一个对象,每个对象都包含着一份。
直接在类下面创建的变量叫类变量,类变量被所有的对象共享,创建多个对象,每个对象都共享着那一份。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 18:02:31 | 显示全部楼层
__init__ 是初始化属性和 设置参数的作用~ 你第一个不能传入参数 但第二个可以

因为这里你设置了 参数的默认值 name='Tom' 所以才可以直接调用函数来打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 18:07:02 | 显示全部楼层
调用方式不一样,A类里面name是属于类的静态属性,B类里面,init属于初始化自动传值,你传的是实例化的值。

一个是总类属性,一个是实例属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 10:17:44 | 显示全部楼层    本楼为最佳答案   
通过__init__为每个对象初始化属性,就是实例变量,每创建一个对象,每个对象都包含着一份。
直接在类下面创建的变量叫类变量,类变量被所有的对象共享,创建多个对象,每个对象都共享着那一份。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 10:23:33 | 显示全部楼层
还有类变量要用类名去点。

A.name

用 对象去点 有这种语法,不过不建议,当想要更改类变量的时候,用对象没办法改变类属性,只有类才能改变类属性。
比如:你上面的 a 想要改变的话
a.name = "Alex"  # 改不了的,这只不过是创建了个实例变量而已,类变量还是那个"Tom"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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