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


打印Tom
在类中可以定义函数,类中的函数称为方法 。
这些方法通过该类的实例都可以访问 。
class Person():name = 'Tom'def speak(self):print('Hello')#创建Person的实例p1 = Person()p2 = Person()print(p1.name)p2.speak()
打印
TomHello
如果是函数,有几个形参,就传几个实参;
如果是方法,默认传递一个参数,即类中的方法至少要定义一个形参,如上面speak()的self参数 。这个self参数,在我们调用对象方法时,并不需要我们去传递 。系统会自动默认传递
4.属性和方法
属性和方法的查找流程:
调用一个对象的属性和方法时,解析器会在当前对象中寻找是否有该属性和方法,如果有,直接返回;
如果没有,去当前对象的类对象中寻找,如果有,则返回类对象中的属性值和方法,如果没有,则报错 。
class Person():name = 'Tom'def speak(self):print('Hello')#创建Person的实例p1 = Person()p2 = Person()p1.name = 'John'print(p1.name,p2.name)
打印John Tom 。
类对象和实例对象中都可以保存属性和方法:
如果属性和方法是所有类的实例共享的,则应该保存到类对象中;
如果属性和方法是某个实例独有的,则应该保存到实例对象中;
一般,属性保存到实例对象中,方法保存到类对象方法中 。
探究self:
class Person():name = ''def speak(self,name):print(self)#创建Person的实例p1 = Person()p2 = Person()p1.name = 'John'p2.name = 'Tom'p1.speak(p1.name)p2.speak(p2.name)
打印
<__main__.Person object at 0x0000020D3D325188><__main__.Person object at 0x0000020D3D3251C8>
即默认传递的参数,就是调用方法的对象本身,明明为self 。
所以,要想实现对象的方法分别调用自己的属性,可以如下:
class Person():name = ''def speak(self,name):print('Hello, I\'m %s'%name)#创建Person的实例p1 = Person()p2 = Person()p1.name = 'John'p2.name = 'Tom'p1.speak(p1.name)p2.speak(p2.name)
打印
Hello, I'm JohnHello, I'm Tom
另一种方法:
class Person():name = ''def speak(self):print('Hello, I\'m %s'%self.name)#创建Person的实例p1 = Person()p2 = Person()p1.name = 'John'p2.name = 'Tom'p1.speak()p2.speak()
效果与前一种方法是一样的 。
5. 特殊方法
class Person:name = 'Tom'def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()p2.speak()
打印Hello,I'm Tom
类中没有定义属性时,手动添加属性
class Person:def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()#手动向对象添加属性p1.name = 'Tom'p2.name = 'Jerry'p1.speak()p2.speak()
打印
Hello,I'm TomHello,I'm Jerry
如未手动添加属性时,
class Person:def speak(self):print('Hello,I\'m %s'%self.name)p1 = Person()p2 = Person()p1.speak()p2.speak()