鱼C论坛

 找回密码
 立即注册
查看: 2190|回复: 3

[已解决]关于类里的__init__函数

[复制链接]
发表于 2023-6-14 22:25:45 | 显示全部楼层 |阅读模式

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

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

x
class Mystuff(object):
    def __init__(self):
        self.tangerine="And now a thousand years between"
    def apple(self):
        print("I am an apple.")
        
thing=Mystuff()
thing.apple()
print(thing.tangerine)

①不太理解这个self,在下面的实例化里,thing就替换了self么
②还有self.tangerine="And now a thousand years between"是在干什么
③实例化里为什么括号里是空的
最佳答案
2023-6-14 22:29:22
这是一个非常好的问题。这里的代码是在创建一个Python类,这个类中有一个初始化方法 __init__ 和一个叫做 apple 的方法。下面我逐个回答你的问题:

① self 是一个习惯性的名字,它是一个指向实例本身的引用。在类的方法中,我们使用这个引用来访问或操作类的属性。当你创建一个类的实例,如 thing = Mystuff() ,Python会自动将 thing 作为 self 传递给 __init__ 方法。

②  self.tangerine = "And now a thousand years between" 这行代码在做的是:当你创建 Mystuff 的一个实例时,它会自动创建一个叫做 tangerine 的属性,并给它赋值为"And now a thousand years between"。你可以通过 thing.tangerine 来访问这个属性的值。

③  Mystuff() 的括号里是空的,是因为在这个例子中, Mystuff 类的 __init__ 方法没有定义任何其他的参数除了 self 。 self 参数不需要你在实例化时传递,Python会自动处理。如果 __init__ 方法定义了其他参数,那么你在实例化时需要传递对应的值。例如:
class Mystuff(object):
    def __init__(self, value):
        self.tangerine = value

thing = Mystuff("A new value")
print(thing.tangerine)  # 输出:A new value

在这个修改后的例子中,我们在 __init__ 方法中定义了一个新的参数 value ,在创建 Mystuff 的实例时,需要传递一个值给这个参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-14 22:29:22 | 显示全部楼层    本楼为最佳答案   
这是一个非常好的问题。这里的代码是在创建一个Python类,这个类中有一个初始化方法 __init__ 和一个叫做 apple 的方法。下面我逐个回答你的问题:

① self 是一个习惯性的名字,它是一个指向实例本身的引用。在类的方法中,我们使用这个引用来访问或操作类的属性。当你创建一个类的实例,如 thing = Mystuff() ,Python会自动将 thing 作为 self 传递给 __init__ 方法。

②  self.tangerine = "And now a thousand years between" 这行代码在做的是:当你创建 Mystuff 的一个实例时,它会自动创建一个叫做 tangerine 的属性,并给它赋值为"And now a thousand years between"。你可以通过 thing.tangerine 来访问这个属性的值。

③  Mystuff() 的括号里是空的,是因为在这个例子中, Mystuff 类的 __init__ 方法没有定义任何其他的参数除了 self 。 self 参数不需要你在实例化时传递,Python会自动处理。如果 __init__ 方法定义了其他参数,那么你在实例化时需要传递对应的值。例如:
class Mystuff(object):
    def __init__(self, value):
        self.tangerine = value

thing = Mystuff("A new value")
print(thing.tangerine)  # 输出:A new value

在这个修改后的例子中,我们在 __init__ 方法中定义了一个新的参数 value ,在创建 Mystuff 的实例时,需要传递一个值给这个参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 22:36:52 | 显示全部楼层
1. 在定义类中,self 表示该类实例化后的对象本身。在这个实例化后的对象中,self 将指向当前对象本身,因此 self.tangerine 表示 Mystuff 类中的 tangerine 成员变量。
在这个代码中,当我们使用 thing=Mystuff() 来创建一个名为 thing 的 Mystuff 对象时,self 就代表这个被创建出来的 thing,thing 中就有了 tangerine 这个成员变量。

2. `self.tangerine="And now a thousand years between"` 是在给当前的对象添加一个名称为`tangerine`的属性并赋初值 "And now a thousand years between"。

3. `Mystuff()` 括号里没有传入任何参数,是因为 Mystuff 类定义了 `__init__()` 方法,该方法已经包含了 `self`,也不需要其他参数输入。调用 `Mystuff() ` 方法即可返回一个实例化后的对象。
class Mystuff(object):
    def __init__(self, value):
        self.tangerine = value

thing = Mystuff("A new value")
print(thing.tangerine)  # 输出:A new value

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 22:56:12 | 显示全部楼层
sfqxx 发表于 2023-6-14 22:36
1. 在定义类中,self 表示该类实例化后的对象本身。在这个实例化后的对象中,self 将指向当前对象本身,因 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 21:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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