一 python自动化基础能力:3.python基础上之数据类型,函数(15)


便会报错:: ''has no'name'
在上例中,对于这个类name属性是必须的,并且对于每一个对象name属性的值是不一样的,将name属性手动添加,很容易出错 。
5.1 特殊方法:
即魔术方法,都是以__开头、__结尾的方法 。
特殊方法不需要我们调用,会在特殊的时候自己调用 。
学习特殊方法:
※特殊方法什么时候调用;
※特殊方法有什么作用 。
class Person:def __init__(self):print('hello')def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p1.__init__()
打印
hellohello
hello打印了两次,因为类的实例创建时,会自动调用了一次,再手动调用了一次,所以调用了两次 。
class Person:def __init__(self):print('hello')def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()p3 = Person()p4 = Person()
打印
hellohellohellohello
可以说,每创建一个实例对象,特殊方法就执行一次 。
对象的创建流程:
p1 = Person()
(1)创建了一个变量;
(2)在内存中创建了一个新的对象;
(3)执行类中的代码块的代码,并且只在类中执行一次;
(4)()方法执行 。
即如类的定义中除特殊方法还有别的代码语句,则其他语句先执行,如,
class Person:print('In class Person')def __init__(self):print('hello')def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()p3 = Person()p4 = Person()
打印
In class Personhellohellohellohello
()方法会在对象创建以后立即执行,向新创建的对象初始化属性,
class Person:def __init__(self):print(self)def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()p3 = Person()p4 = Person()
打印
<__main__.Person object at 0x000002E1EEC36708><__main__.Person object at 0x000002E1EEC36EC8><__main__.Person object at 0x000002E1EEC36F08><__main__.Person object at 0x000002E1EEC36F48>
即打印self即打印出对象,self代表对象本身 。
class Person:def __init__(self):self.name = 'Tom'def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p1.speak()
打印Hello,I'm Tom
为了解决之前出现过的问题,可以在()方法中添加参数,通过self向新建的对象初始化对象 。
class Person:def __init__(self,name):self.name = namedef speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p1.speak()
初始化时未添加name,会报错
: ()1: 'name'
所以必须在初始化时即添加,
class Person:def __init__(self,name):self.name = namedef speak(self):print('Hello,I\'m %s'%self.name)p1 = Person('Tom')print(p1.name)p2 = Person('Jerry')print(p2.name)p1.speak()p2.speak()
打印
TomJerryHello,I'm TomHello,I'm Jerry
6.类的基本结构: