- 面对对象和类的概念
- 要研究的东西就是对象。(列表、元组、字典都可以作为对象)
- 对象=属性+方法(描述对象能做什么)
eg. 小狗=(身高,体重,品种)+(睡觉,吃,叫)
- 把对象归类——类
- python是面向对象的语言
- 通过在类中定义变量来说明属性;通过在类中定义函数来说明方法。
- 类和对象的创建
- 先创建类:
class Student: age = 13 #age是Student类的属性
- 创建对象:我们通过 object = class() 这个形式来创建对象。
class Student: age = 13 # age是Student类的属性 s1 = Student() # 创建对象s1 print(s1.age)
- __init__()和self
- __init__()是一个特殊方法,特殊方法的特点是名字前后各有两个下划线。
- 在类中定义了__init__()这个方法,创建对象时,Python会自动调用这个方法。把这个过程叫做初始化。
class Student: age = 13 # age是Student类的属性 def __init__(self, name): self.name = name print('The student is ', self.name) s1 = Student('Lily') # 创建对象s1 s2 = Student('Pva')
- self其实就是对象p1、p2的表示。换句话说,self在类的语句里就代表着类的一个对象。
- 当我们创建了对象p1,那么此时在类里面self就是指p1。
- 属性操作
①引用属性:(通过定义show函数)
class Student:
age = 13 # age是Student类的属性
def __init__(self, name):
self.name = name
def show(self): # 定义show()函数,用来显示年龄
print(self.age)
s1 = Student('Lily') # 创建对象s1
s2 = Student('Pva')
s1.show() # 调用show()函数
②修改属性:(也可以用setattr()见下)
s1.name = 'PPnoak' # 修改对象s1的name属性
③删除属性:(也可以用delattr()方法,见下)
del s1.name
④hasattr()确认p1是不是有name这个属性。返回值为True就说明p1有name这个属性。
print(hasattr(s1, 'name'))
⑤getattr(),用来获取对象的属性。
print(getattr(s2, 'name'))
⑥setattr(),用来修改对象的属性。
setattr(s1, 'name', 'sfw')
⑦delsttr(),用来删除对象的属性。
delattr(s1,'name') #删除s1对象的name属性
⑧__doc__ 用来查看帮助信息
⑨__name__ 用来查看类的名字用的。
- 类的继承
①父类需要有所有子类的共同点。(我们把动物作为一个父类,那么猫、狗等等就是动物的子类。狗又可以细分成吉娃娃、泰迪、哈士奇等等。但他们都还是动物。)
②子类的一个对象p1就自动有父类的所有属性。
③我们在子类名称后的括号中写上父类的名称。说明Child是Parent的子类。括号中为object说明没有父类了。
class Parent(object): #括号中为object说明没有父类了
def p(self):
print('正在调用父类方法')
class Child(Parent): #括号中写父类名称
def c(self):
print('正在调用子类方法')
④如果子类中定义的方法或属性与父类中同名,子类定义的方法或属性会覆盖父类的。
class Parent(object):
def p(self):
print('正在调用父类方法')
class Child(Parent):
def p(self):
print('正在调用子类方法')
p1=Child() #新建对象
p1.p()
⑤没有属性和方法写pass。
class Animal(object):
pass
- 阶段测试
定义一个类叫动物,动物下面还有一个类叫鱼,鱼里面又有金鱼、鲨鱼和鲤鱼。
class Animal(object):
pass
class fish(Animal):
def __init__(self, name):
self.name = name
print(self.name)
shark = fish('shark')
jinyu = fish('jinyu')
liyu = fish('liyu')