__init__是初始化,叫构造函数。你把他看成普通函数就行了,只是在实例化时,这个函数会自动执行进行赋值,在后续可以使用此变量。比如下面实例化时传入了名字和工作。在full_name方法调用时就可以直接使用self.name。
class Test(object):
def __init__(self, name, job):
self.name = name
self.job = job
def full_name(self,firstname):
return self.name+' ' + firstname
first = Test('xiaohua', 'coder')
second = Test('xiaoming', 'teacher')
print(first.name, first.job) #xiaohua coder
print(second.name, second.job) #xiaoming teacher
print(first.full_name('lee')) #xiaohua lee
class TestInherit(Test):
pass
third = TestInherit('xiaogang','worker')
print(third.name) #xiaogang
print(third.full_name('wang')) #xiaogang wang
第二个类通过在类名后的括号中继承Test类,就拥有了Test类中的属性。但是当TestInherit类中定义了和父类中同名的属性或方法时,子类的实例对象会继承TestInherit中的属性或方法而不会去寻找父类中的同名方法。所以,实例的属性是从子类向父类中逐级向上进行查找。
这部分,可以仔细看下Python基础部分关于类的介绍。
关于Pycharm,可能是你设置有问题,单从图片,并不能看出原因。