python之面向对象

一、构造方法

class Dog:
	
	#构造方法  - 添加实例属性,做其他初始化工作
	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10

		print(f"{self.name}出生了!汪汪!")


d1 = Dog('大黄',0.7,3)   #创建第一个实例
d2 = Dog('二黑',0.5,4)   #创建第二个实例
print(d1.name,d1.height,d1.power,d1.blood)    #输出:大黄 0.7 3 10
print(d2.name,d2.height,d2.power,d2.blood)    #输出:二黑 0.5 4 10

二、实例方法

第一个参数必须是self

class Dog:

	
	#构造方法  - 添加实例属性,做其他初始化工作
	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10
		
		print(f"{self.name}出生了!汪汪!")
		
	#实例方法,第一个参数必须是self
	def bark(self):
		print(f'我是{self.name},身高{self.height},血量{self.blood},攻击力{self.power}')


d1 = Dog('大黄',0.7,3)   #创建第一个实例
d2 = Dog('二黑',0.5,4)   #创建第二个实例
d1.bark()
d2.bark()

输出

大黄出生了!汪汪!
二黑出生了!汪汪!
我是大黄,身高0.7,血量10,攻击力3
我是二黑,身高0.5,血量10,攻击力4

三、类属性

1.整个类只有1份,所有的实例都共享这一份
2.可以通过类名或者实例名访问类属性,访问的都是同一个
3.修改类属性需要通过类名
4.因为通过实例名就会创建一个同名的实例变量
5.实例变量和类变量同名时,使用实例访问优先使用的是实例变量

class Dog:

	num_of_dogs = 0   #类属性

	#实例方法,第一个参数必须是self
	#构造方法  - 添加实例属性,做其他初始化工作
	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10
		
		print(f"{self.name}出生了!汪汪!")


d1 = Dog('大黄',0.7,3)   #创建第一个实例
d2 = Dog('二黑',0.5,4)   #创建第二个实例

#通过类名访问
print(Dog.num_of_dogs)    #输出:0
#通过实例访问
print(d1.num_of_dogs)     #输出:0
print(d2.num_of_dogs)     #输出:0

Dog.num_of_dogs = 8
print(Dog.num_of_dogs)    #输出:8
print(d1.num_of_dogs)     #输出:8
print(d2.num_of_dogs)     #输出:8

d1.num_of_dogs = 10  #给d1创建了一个实例属性,当实例属性和类属性相同时,通过实例访问,优先访问的是实例属性
print(Dog.num_of_dogs)    #输出:8
print(d1.num_of_dogs)     #输出:10
print(d2.num_of_dogs)     #输出:8

四、类方法

可以通过类名调用,也可以通过实例名调用
1.类方法不能访问实例变量,可以访问类变量
2.类方法需要加上@classmethod,第一个参数必须是cls

class Dog:

	dogs = []   #用来保存所有狗的列表

	@classmethod
	def num_of_dogs(cls):
		"""
		得到狗的总数
		"""
		return len(cls.dogs)

	@classmethod
	def biggest(cls):
		"""
		得到所有狗中高度的最大值
		"""
		max_height = -1
		for d in cls.dogs:
			if(d.height > max_height):
				max_height = d.height
		return max_height

	#实例方法,第一个参数必须是self
	#构造方法  - 添加实例属性,做其他初始化工作
	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10

		Dog.dogs.append(self)   #将创建的狗添加到dogs列表中
		print(f"{self.name}出生了!汪汪!")



d1 = Dog('大黄',0.7,3)   #创建第一个实例
d2 = Dog('二黑',0.5,4)   #创建第二个实例

print(Dog.num_of_dogs())   #输出:2
print(d1.num_of_dogs())    #输出:2
print(d2.num_of_dogs())    #输出:2

print(Dog.biggest())       #输出:0.7
print(d1.biggest())        #输出:0.7
print(d2.biggest())        #输出:0.7

五、静态方法

1.需要使用@staticmethod
2.不需要传入实例(self)或者类(cls)作为第一个参数
应用:当不需要传入实例和类时,采用静态方法

class Dog:

	@staticmethod
	def intro():
		print("Dog is human's best friend")

dog = Dog()

#使用类名访问静态方法
Dog.intro()
#使用实例名访问静态方法
dog.intro()

输出

Dog is human’s best friend
Dog is human’s best friend

六、继承

class Dog:

	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10
		

	def bark(self):
		print(f'我是{self.name},身高{self.height}')
#继承父类Dog
class SheepDog(Dog):
	def __init__(self,name,height,power,num_of_sheep):
		super().__init__(name,height,power)
		self.num_of_sheep = num_of_sheep
		
	def protect(self):
		print('我开始保护小羊了')

sd = SheepDog('牧羊犬1',0.6,4,5)
print(sd.name)    
print(sd.blood)   
sd.bark()
sd.protect()

输出

牧羊犬1
10
我是牧羊犬1,身高0.6
我开始保护小羊了

class Dog:

	def __init__(self,name,height):
		self.name = name
		self.height = height
		

	def bark(self):
		print(f'我是{self.name},身高{self.height}')

class SheepDog(Dog):
	def __init__(self,name,height,num_of_sheep):
		super().__init__(name,height)
		self.num_of_sheep = num_of_sheep

	def bark(self):
		print("我是牧羊犬,我骄傲!")
		super().bark()  #继承父类的方法


sd = SheepDog('牧羊犬1',0.6,5)
sd.bark()
#输出
"""
我是牧羊犬,我骄傲!
#我是牧羊犬1,身高0.6
"""

七、创建类

1.创建类时,传的参数可以是其他类
dog.py代码中的如下

class Dog:

	def __init__(self,name,height,power):
		self.name = name
		self.height = height
		self.power = power
		self.blood = 10
		

	def bark(self):
		print(f'我是{self.name},身高{self.height}')
#宠物犬
class PetDog(Dog):
	def __init__(self,name,height,power,price,house):
		super().__init__(name,height,power)
		self.price = price
		self.house = house

	def sing(self):
		print('我开始唱歌咯')

#狗窝类
class DogHouse():
	def __init__(self,no):
		self.no = no
		print(f'已创建狗窝{self.no}')

game.py的代码如下

import dog

house = dog.DogHouse('9527')
pd = dog.PetDog('小可爱',0.2,1,988,house)
print(pd.price)
pd.bark()

在命令行输入python game.py

E:\python\OOP>python game.py
已创建狗窝9527
988
我是小可爱,身高0.2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值