欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Python面向对象

Python面向对象

2024/10/25 20:26:09 来源:https://blog.csdn.net/qq_57907966/article/details/142588338  浏览:    关键词:Python面向对象

Python面向对象

类和对象

class Person:def __init__(self,name,age):self.name=name #类的成员属性self.age=ageprint("构造函数")def get_name(self):print(self.name)def get_age(self):print(self.age)p =Person("张三",18)
p.get_name()
p.get_age()

打印结果:

构造函数
张三
18

成员方法都会默认有参数self,调用的时候不需要传递self

特殊方法和参数

__init__方法

__init__是一个内置的方法
对象创建的时候就会自动执行__init__方法

# 定义类
class Person:def __init__(self):print('执行了init方法')# 创建对象
p1 = Person()
p2 = Person()

输出:

执行了init方法
执行了init方法

一旦创建了该类的对象就会执行__init__方法

__str__方法

类似于Java中的toString()方法
__str__也是类的内置方法

class Person:def __init__(self,name,age):self.name=name #成员属性self.age=ageprint("构造函数")def __str__(self):return "name={},age={}".format(self.name,self.age)def get_name(self):print(self.name)def get_age(self):print(self.age)p =Person("张三",18)print(p)
name=张三,age=18

私有化

属性或者方法设置为不能在外部访问,就是私有化
私有化包括:属性私有化方法私有化

属性私有化

属性私有化格式,注意是两个下划线__
self.__属性名 = 属性值

class Circle:def __init__(self,radius):# 半径self.radius = radius# 私有化圆周率属性 self.__PI = 3.1415926def perimeter(self):'''求圆的周长:return: 圆的周长'''return 2 * self.__PI * self.radius

私有化作用:保证类中数据安全

方法私有化

方法的私有化方式和属性私有化方式一样

class Person:def __say_hello(self):print('hello')

继承

继承指的是一个对象直接使用另一个对象的属性或方法
继承的格式:
class 子类名(父类名):

class Person:def __init__(self,name,age):self.name=name #成员属性self.age=ageprint("构造函数")def __str__(self):return "name={},age={}".format(self.name,self.age)def get_name(self):print(self.name)def get_age(self):print(self.age)def eat(self):print(f"{self.name}吃饭")#学生类继承Person
class Student(Person):def __init__(self,name,age,height):super().__init__(name,age)self.height=height #定义自己的属性heights=Student("张三",18,180)
s.eat()

输出结果:

张三吃饭

多继承

当一个类从多个父类继承属性和方法时,就称为多继承。
多继承格式:
class 子类(父类1,父类2...)

class Animal:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name} is eating.")def sleep(self):print(f"{self.name} is sleeping.")class Flyable:def fly(self):print(f"{self.name} is flying.")class Swimmable:def swim(self):print(f"{self.name} is swimming.")class Duck(Animal, Flyable, Swimmable):def __init__(self, name):super().__init__(name)duck = Duck("Donald")
duck.eat()   # 输出: Donald is eating.
duck.sleep()   # 输出: Donald is sleeping.
duck.fly()   # 输出: Donald is flying.
duck.swim()   # 输出: Donald is swimming.

注意,在多继承的情况下,当多个父类中具有相同名称的方法时,解释器将按照方法解析顺序(Method Resolution Order,MRO)来确定使用哪个方法。在上述示例中,Python的默认MRO算法会按照类定义时的顺序来解析方法。在这个例子中,Duck类首先从Animal类继承方法,然后是Flyable类,最后是Swimmable类(按照括号的顺序从前往后)。

多态

"""
多态案例
"""
# 父类
class Human:def eat(self):print('人类吃饭')# 中国人
class ZhHuman(Human):def eat(self):print('中国人使用筷子吃饭')# 美国人
class UsHuman(Human):def eat(self):print('美国人使用刀叉吃饭')# 非洲人
class AfricaHuman(Human):def eat(self):print('非洲人直接用手吃恩希玛')# 函数
def someone_eat(someone):'''接收一个具备吃eat功能的对象'''someone.eat()# 创建四个对象
human = Human()
zh_human = ZhHuman()
us_human = UsHuman()
africa_huamn = AfricaHuman()# 调用translate方法
someone_eat(human)
someone_eat(zh_human)
someone_eat(us_human)
someone_eat(africa_huamn)

鸭子类型

一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟可以被称为鸭子。这就是鸭子类型Duck Typing
对于上述多态中的的someone_eat

class Dog:def eat(self):print('狗吃骨头')# 函数
def someone_eat(someone):'''接收一个具备吃eat功能的对象'''someone.eat()dog = Dog()
someone_eat(dog)

someone_eat需要传递一个具备eat方法的对象,但是Dog也具备eat功能,所以也可以传递运行
这是由于python是动态类型语言,不能像C++、Java等静态类型语言一样,限制传递的数据类型
只要运行时发现dog对象有这个功能,就可以在函数中使

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com