chengyiye 发表于 2017-7-17 14:27:52

python中__init__函数提问(菜鸟提问)

在Pyhton中,创建一个类,同时创建他的构造函数(__init__),在构造函数下创建实例对象,为什么要加self.
例如:

Class Bird():
        def __init__(self):
        self.name='小鸟'


Class Bird():
        def __init__(self):
        name='小鸟'


上面两个代码有什么区别?

alltolove 发表于 2017-7-17 14:51:44

底下是错误的写法,类的私有属性必须加self关键字

MSK 发表于 2017-7-17 14:52:06

实例化一个Bird对象我bird = Bird()
第二个无法通过bird.name 来访问name属性
要访问需要在类内部调用super().name
也就是说,不带self的属性属于最原始的父类,可以说不会被子类继承,但是子类仍然可以访问父类属性

Krant5 发表于 2017-7-17 15:12:22

一个是实例对象的属性,一个是类对象的属性,OK ?

gopythoner 发表于 2017-7-17 15:32:41

本帖最后由 gopythoner 于 2017-7-17 15:34 编辑

看看效果,再看疗效
class Bird():
def __init__(self):
    self.name='小鸟'
    year = 100
   
def test(self):
    print(self.name)#这里可以直接使用,self.name
    print(year)       #这里就不能使用,强行打印会报错

b = Bird()
b.test()

看输出,是不是下面那个打印报错了
小鸟
Traceback (most recent call last):
File "python", line 11, in <module>
File "python", line 8, in test
NameError: name 'year' is not defined

通俗来讲,加了self的属性就是可以直接传递下去,让类的其他函数都能直接引用
页: [1]
查看完整版本: python中__init__函数提问(菜鸟提问)