Python之类对象

一面向对象

类和对象都是面向对象重要的概念。面向对象是一种变成思想,即按照真实世界思维方式构建软件系统。

二定义类

python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。
class Car(object):
#类体
pass

三创建对象

类相当于一个模板,依据这样的模板创建对象,就是类的实例化。
class Car(object):
#类体
pass
car = Car()

四类的成员

类的成员:
1.成员变量,保存了类或对象的数据
2.构造方法:用于初始化成员变量
3.成员方法:在类中定义函数
4.属性:对类进行封装提供的特殊的方法

4.1实例变量

init()是构造方法,构造方法用来初始化实例变量。

class Dog:
def init(self,name,age):
self.name = name
self.age = age

d = Dog(‘球球’,2)

4.2构造方法

init()是构造方法,第一个参数应该是self,之后的参数用来初始化实例变量。
class Dog:
def init(self,name,age,sex=“雌性”):
self.name = name
self.age = age
self.sex = sex

d1 = Dog(‘球球’,2)
d2 = Dog(‘大黄’,2,“雄性”)
d3 = Dog(name=‘小黑’,sex=“雄性”,age=2)
print(“{0}:{1}岁{2}”.format(d1.name,d1.age,d1.sex))
print(“{0}:{1}岁{2}”.format(d2.name,d2.age,d2.sex))
print(“{0}:{1}岁{2}”.format(d3.name,d3.age,d3.sex))
在这里插入图片描述

4.3实例方法

实例方法与实例变量一样,都是实例某个个体特有的方法。
在这里插入图片描述

4.4类变量

类变量是共享的变量,它属于类,不属于单个对象。
在这里插入图片描述

4.5类方法

类方法与类变量类似,属于类,不属于单个个体。
注意:定义类方法需要装饰器,装饰器以@开头 修饰函数 、方法和类,用来约束它们。
class Account:
interest_rate = 0.012 # 类利率
def init(self,owner,amount):
self.owner = owner
self.amount = amount

#类方法
@classmethod 
def interest_by(cls,amt):
	return cls.interest_rate*amt

interest = Account.interest_by(12000.0)

print(“计算利息:{0}”.format(interest))
在这里插入图片描述

五封装性

封装性是面向对象重要的基本特征之一,封装性隐藏了对象的内部细节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变的简单。

5.1私有变量

为了防止外部调用者随意存取类的内部数据,内部数据会被封装成“私有变量”。
在默认情况下,python的变量默认为共有的。如果想让他们成为私有的变量,在前面加上双__

后两句错误会发生,在类的内部可以访问私有变量,在外部不可以。
在这里插入图片描述

5.2私有方法

私有方法与私有变量类似,在方法前加上__就是私有方法啦。

5.3使用属性

为了实现对象的封装,在一个类中不应该有共有的成员变量。这些成员变量应该被设计为私有的,然后通过公有的set赋值 和get取值:
class Dog:
#构造方法
def init(self,name,age,sex=“雌性”):
self.name = name
self.__age = age
self.sex = sex
#实例方法
def run(self):
print(“{0}再跑******”.format(self.name))
#get方法
def get_age(self):
return self.__age
#set方法
def set_age(self,age):
self.__age = age
dog = Dog(‘球球’,2)
print(“狗狗年龄:{}”.format(dog.get_age()))
dog.set_age(3)
print(“修改后狗狗的年龄:{}”.format(dog.get_age()))
在这里插入图片描述
在上面的事例中,当外部调用者通过两个公有方法 访问被封装的私有成员变量时,会比较麻烦,有没有更好的办法?
我们可以在类中定义属性,属性可以代替get()和set()这两个方法。
在这里插入图片描述
定义age属性的get方法@property 装饰器进行修饰,方法名就是属性名

可以通过属性取值,访问形式为实例.属性

六继承性

6.1继承

继承性也是面向对象重要的特征之一。
在面向对象中,动物是一般的类。猫是特殊的类,被称为"子类"。特殊的类拥有一般类的全部的数据和操作,可以称为子类继承父类。
class Animal:
def init(self,name):
self.name = name

def show_info(self):
	return("动物的名字:{0}".format(self.name))

def move(self):
	print("动一动****")

class Cat(Animal):

def __init__(self,name,age):
	super().__init__(name)#调用父类的构造方法,初始化父类的成员变量
	self.age = age #实例变量

cat = Cat(“Tom”,2)
cat.move()
print(cat.show_info())
在这里插入图片描述
在子类构造方法中会调用父类构造方法,这个过程有些复杂,能解释一下吗?
构造方法的作用是初始化类的实例成员变量,在初始化子类时,也初始化父类的实例成员变量。
在创建cat时调用Cat类构造方法,调用父类的构造方法,初始化父类的实例成员变量,初始化子类的实例成员变量。

6.2多继承

在python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或变量,则子类优先继承左边父类的成员方法或变量:
class Horse:
def init(self,name):
self.name = name #实例变量 name

def show_info(self):
	return "马的名字:{0}".format(self.name)

def run(self):
	print("马跑")

class Donkey:
def init(self,name):
self.name = name
def show_info(self):
return “驴的名字:{0}”.format(self.name)

def run(self):
	print("驴跑***")
	
def roll(self):
	print("驴打滚***")

class Mule(Horse,Donkey):
def init(self, name,age):
super().init(name)
self.age =age

m = Mule(“骡子A”,1)
m.run() #继承父类Horse 的方法
m.roll() #继承父类Donkey的方法
print(m.show_info())#继承父类Horse 的方法
在这里插入图片描述

6.3方法重写

如果子类的方法名与父类的方法名重名,则在这种情况下,子类的方法会重写父类的同名方法。
class Horse:
def init(self,name):
self.name = name #实例变量 name

def show_info(self):
	return "马的名字:{0}".format(self.name)

def run(self):
	print("马跑")

class Donkey:
def init(self,name):
self.name = name
def show_info(self):
return “驴的名字:{0}”.format(self.name)

def run(self):
	print("驴跑***")
	
def roll(self):
	print("驴打滚***")

class Mule(Horse,Donkey):
def init(self, name,age):
super().init(name)
self.age =age

def show_info(self):
	return "驴的名字:{0},{1}岁".format(self.name,self.age)

m = Mule(“骡子A”,1)
m.run() #继承父类Horse 的方法
m.roll() #继承父类Donkey的方法
print(m.show_info())#调用子类mule自己的方法
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王先森001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值