类和对象(2)
1、类的定义:
类和对象都是对现实⽣活中事物的抽象
事物包含两部分
1)数据(属性)
2) ⾏为(⽅法)
调⽤⽅法 对象.⽅法名()
⽅便调⽤和函数调⽤的区别:如果是函数调⽤,调⽤时有⼏个形参,就会传递⼏个实参。如果是⽅法调⽤,默认传递⼀个参数,所以⽅法中⾄少得有⼀个形参。
在类代码块中,我们可以定义变量和函数
变量会成为该类实例的公共属性,所有的该实例都可以通过 对象属性名 的形式访问。
函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象⽅法名 的形式访问。
class Kind:
pass
2、对象的初始化:
class Kind:
def __init__(self, name,age):
self.name = name
self.age = age
kind = Kind("十七", 18)
3、类属性:
实例属性(只有对象可以访问):self.XXX(类定义中) 或者 对象.XXX
class Kind:
def __init__(self, name,age):
self.name = name # self.XXX(类定义中)
self.age = age # self.XXX(类定义中)
kind = Kind("十七", 18)
print(kind.name) # 对象.XXX
4、实例方法
实例方法:self 对象调用
class Kind:
def __init__(self, name,age):
self.name = name # self.XXX(类定义中)
self.age = age
def hta(self):
print("这是方法。")
kind = Kind("十七", 18)
kind.hta() # 对象调用
5、类方法
类方法:cls @classmethod 类和对象都可以调用。一般是类去调用
6、继承
继承是⾯向对象三⼤特性之⼀
通过继承我们可以使⼀个类获取到其他类中的属性和⽅法
在定义类时,可以在类名后⾯的括号中指定当前类的⽗类(超类、基类)
继承提⾼了类的复⽤性。让类与类之间产⽣了关系。有了这个关系,才有了多态的特性。
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
class Chinese(Human):
pass
xiaobei = Chinese()
print(xiaobei.arms) # 输出:2
xiaobei.walk() # 输出:直立行走
7、⽅法重写
如果在⼦类中有和⽗类同名的⽅法,则通过⼦类实例去调⽤⽅法时,会调⽤⼦类的⽅法⽽不是⽗类的⽅法,这个特点我们称之为⽅法的重写(覆盖)
当我们调⽤⼀个对象的⽅法时:
会优先去当前对象中寻找是否具有该⽅法,如果有则直接调⽤
如果没有,则去当前对象的⽗类中寻找,如果⽗类中有则直接调⽤⽗类中的⽅法。
如果没有,则去⽗类中的⽗类寻找,以此类推,直到找到object,如果依然没有找到就报错了。
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
class Chinese(Human):
hair = '黑头发'
skin = '黄皮肤'
def speak(self):
print('说汉语')
def eat(self):
print('吃米饭')
xiaobei = Chinese()
print(xiaobei.arms) # 输出:2
print(xiaobei.hair) # 输出:黑头发
print(xiaobei.skin) # 输出:黄皮肤
xiaobei.walk() # 输出:直立行走
xiaobei.speak() # 输出:说汉语
xiaobei.eat() # 输出:吃米饭
8、super 函数
super()可以获取当前类的⽗类
并且通过super()返回对象调⽤⽗类⽅法时,不需要传递self
class A:
def __init__(self):
print("进入:A")
print("离开:A")
class B(A):
def __init__(self):
print("进入:B")
super(B, self).__init__()
print("离开:B")
b = B()
输出结果:
进入:B
进入:A
离开:A
离开:B
1万+

被折叠的 条评论
为什么被折叠?



