类:抽象行为和状态
- 类:将行为和状态打包在一个对象中
采用驼峰命名法
class Dog():
"""创建了狗类"""
def __init__(self, name:str, age:int) -> None:
'''初始化属性name和age'''
self.name = name
self.age = age
def sit(self) -> None:
'''模拟小狗蹲下'''
print(self.name.title()+' is now sitting.')
def roll_over(self) -> None:
'''模拟小狗打滚'''
print(self.name.title()+' rolled over!')
taidi = Dog('taidi', 2) # 对象实例化
print(taidi.sit())
-
self
解读- 类似于其他语言中的
this
- 类中方法的参数第一个必须是
self
,且一定要存在,不存在会报错 - 为什么类中的方法一定要有
self
呢?
taidi.sit() # 实例化的对象调用类中的方法 相当于: Dog.sit(taidi) # 解释器是这样执行的:类调用自己的方法把实例化的对象作为一个参数传递进去 也就说明:类中的方法的第一个参数是必要的,用于接收类所创建的实例化对象,约定名称为`self`,是对实例对象的一个引用,让实例能够访问类中的属性和方法
- 类似于其他语言中的
-
方法
__init__()
- 类似于其他语言中的构造函数,对值的初始化
- 初始化类中的属性变量,关联到被创建的实例化对象上面
- 以
self
为前缀的属性都可以被类中的所有方法使用 - 当然也可以利用函数的默认参数,为类中的属性设置默认值
-
方法是共享的,属性不共享
单独使用对象名称类中的方法由同一个类创建的所有实例对象所共享,类中的属性不会由同一个类创建的其他对象所共享
>>> type(d) # 对象的类型
<class '__main__.Dog'>
>>> id(d) # 对象在内存中的地址
92579984
>>> hex(id(d)) # 地址转为十六进制数
'0x584a890'
继承
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def get_descriptive_name(self):
long_name = str(self.year)+' '+self.make+' '+self.model
return long_name.title()
def read_odometer(self):
print("this car has "+str(self.odometer)+" miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer:
self.odometer = mileage
else:
print('You can`t roll back an odometer!')
def increment_odometer(self, miles):
self.odometer += miles
def fill_gas_tank(self):
print('this car has fill gas tank!')
# 电动汽车 继承 汽车类
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70 # 定义了属于子类的方法和属性
def describe_battery(self):
print("this car has a "+str(self.battery_size) + '-KWH battery.')
def fill_gas_tank(self):
print('This car doesn`t need a gas tank')
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
- 子类继承父类
# 子类中传入父类作为参数,并且需要调用 super 方法去为父类初始化值
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
-
super()
是为了让子类和父类关联起来 -
可以重写父类的方法,也可以添加属于子类的方法和属性
-
将大型的类拆分为多个协同工作的小类
类的实例对象用作属性
class Battery():
def __init__(self, battery_size=70):
self.battery_size = battery_size
def describe_battery(self):
print('This car has a '+str(self.battery_size)+'-kWh battery.')
class ElectricCar(Car):
def __init__(self, make, model, year):
self.battery_size = Battery() # 类的实例对象作为子类实例属性,默认值为70
super().__init__(make, model, year)
def fill_gas_tank(self):
print('This car doesn`t need a gas tank')
my_tesla = ElectricCar('tesla', 'model s', 2016)
my_tesla.battery_size.describe_battery() # 子类的实例对象的属性去调用Battery的方法
- 较高的逻辑层面去考虑,如何用代码来表示实物,所谓的现实世界建模
网友评论