Python从入门到实战:第九章学习笔记

Python从入门到实战:第九章学习笔记

第九章:类
创建和使用类

# 创建Dog类

class Dog():
	"""一次模拟小狗的简单操作"""
	def __init__(self, name, old):   #注意这里init的颜色
		"""初始化name和old属性"""
		self.name = name
		self.old = old

	def set(self):  #以self为前缀的变量都可供类中的所有方法使用,虽然这个方法用到了self.name,但是这里不需要在添加它的形参。
		print("这个小狗正在坐下!" + self.name.title())

	def roll_over(self):
		print("这个小狗正在打滚!" + self.name.title())

类中的函数称为方法,方法__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它,形参self必不可少,还必须位于其他形参的前面,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
**以self为前缀的变量都可供类中的所有方法使用,**self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例,该变量被称为属性。
Dog类还定义了另外两个方法:sit()和roll_over()。由于这些方法不需要额外的信息,如名字或年龄,因此它们只有一个形参self。

根据类来创建实列

my_dog = Dog('jim', 6)

print("My dog's name is " + my_dog.name.title())
print("My dog's old is " + str(my_dog.old))
#My dog's name is Jim
#My dog's old is 6

表示一条小狗的实列,存储在变量my_dog中,要注意:我们通常可以认为首字母大写的名称(如Dog)指的是类,而小写的名称(如my_dog)指的是根据类创建的实例。
访问实列的属性,句点表示:my_dog.name
调用类中的方法,句点表示:my_dog.sit()

(1)给属性指定默认值
设置默认值时,在方法__init__()内指定;如果对某个属性这样做了,就无需包含为它提供初始值的形参。

class Car():
	def __init__(self, name, make, year):
		"""设置属性,如果某一个属性设置了默认值,就不需要再设置形参了!"""
		self.name = name
		self.make = make
		self.year = year
		self.odometer_reading = 0  #没有其对应的形参

(2)修改属性的值
通过实列修改:实列名.属性=xx
通过方法修改:实例名.方法(xx)

继承:
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

class Car():
   ---------
# 父类写好之后,写子类
class ElectriCar(Car):
	def __init__(self, name, make, year):
		"""初始化父类的属性"""
		super().__init__(name, make, year)

super()是一个特殊函数,帮助Python将父类和子类关联起来.

#实列化
my_car = ElectriCar('audo', 'china', 2017)
message = my_car.describe_car()
print(message)
#2017 Audo china

(1)给子类定义新的属性和方法

# 给子类添加一些新的属性
class ElectriCar(Car):
	def __init__(self, name, make, year):
		"""初始化父类的属性"""
		super().__init__(name, make, year)
		"""添加子类的新属性"""
		self.battery_size = 70

	def show_battery_size(self):
		print("这个新型电车的电池大小为 " + str(self.battery_size))

your_car = ElectriCar('audo', 'china', 2017)
your_car.show_battery_size()
#这个新型电车的电池大小为 70

(2)重新:对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,它与要重写的父类方法同名即可,

(3)将实列作为属性
在实际中,可能会遇到类的细节越来越多,需要将大类的一部分作为一个单独的小类提取出来,再把这个小类的实例用作大类的一个属性。

#父类
class User():
	"""存储用户的基本信息"""
	def __init__(self, first_name, last_name, school, old):
		"""先设置好属性"""
		self.first_name= first_name
		self.last_name = last_name
		self.school = school
		self.old = old
		self.login_attempts = 0

	def greet_user(self):
		print("小的给你请安了 " + self.last_name+ '大大~~')

# 编写类作为属性
class Privilege():
	def __init__(self):
		self.privilege_1 = '改变地球'

	def show_privileges(self):
		print("这个管理员的能力就是" + self.privilege_1)
#子类
class Admin(User):
	def __init__(self, first_name, last_name, school, old):
		"""初始化父类的属性"""
		super().__init__(first_name, last_name, school, old)
		"""添加子类的新属性privilege,并且是把类作为属性"""
		self.privilege = Privilege()

user_1 = Admin("元", "小玉", "无名大学", '22')
#调用实列化user_1的属性privilege中的方法
user_1.privilege.show_privileges()  #这个管理员的能力就是改变地球
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值