栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python — 面向对象【2】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python — 面向对象【2】

self详解

self 代表当前对象,而不是类

class  User():
    name = "sc"
    def info(self):
        print(f"i am {self.name}")
        print(self)
        print(self.__class__)
user1 = User()
user1.info()
user2 = User()
user2.info()

self 不必非写成self

约定成都使用self

class  User():
    name = "sc"
    def info(this):
        print(f"i am {this.name}")
        print(this)
        print(this.__class__)
user1 = User()
user1.info()
user2 = User()
user2.info()
#实现的效果是一样的

self 可以不写 不能用实例调用,只能用类调用

class  User():
    name = "sc"
    def info(self):
        print(f"i am {self.name}")
        print(self)
        print(self.__class__)
​
    def info2():
        print("this is info2")
user1 = User()
user1.info()
user1.info2()    #不能调用
User.info2()    #可以调用
类的继承

面向对象的好处

  • 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。 继承完全可以理解成类之间的类型和子类型关系。

  • 以节省很多的代码,不需要写,直接使用

  • 衍生出不同的子类,大部分代码一样,部分代码不一

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

创建子类时,父类必须包含在当前文件中,且必须在子类之前。在括号中包括父类的名称,父类也称为超类(superclass),名称super因此得名

class Restaurant:
    def __init__(self,restaurant_name,cuisine_type):
        print(f"This is {restaurant_name},you can choose{cuisine_type}")
    def describe_restaurant(self):
        print('running')
    def open_restaurant(self):
        print("opening")
 class Hardy(Restaurant):
    def __init__(self,name,cuisine):
        super().__init__(self,name,cuisine)    #调用父类的,super
重写父类的方法

对于父类的方法,只要不符合子类描述实物的时候,都可以进行重写,只需要在子类中定义一个方法,与父类中的相同即可。

class Restaurant:
    def __init__(self,restaurant_name,cuisine_type):
        print(f"This is {restaurant_name},you can choose{cuisine_type}")
    def describe_restaurant(self):
        print('running')
    def open_restaurant(self):
        print("opening")
 class Hardy(Restaurant):
    def __init__(self,name,cuisine):
        super().__init__(self,name,cuisine)    
        def open_restaurant(self):
        print("close")        #重写这个方法,Hardy类的open_restaurant就会是close
#继承父类的属性和方法
#对象属性查找,先在实例空间找,没有就去类空间找
#类空间也没有就去父类空间,层层往上找,直到找到object
python中的多态
  • 多态(Polymorphism)按字面的意思就是“多种状态”

  • 在面向对象语言中,接口的多种不同的 实现方式即为多态。

  • Python是一种多态语言,崇尚鸭子类型。

  • 在程序设计中,鸭子类型是动态类型的一种风格。

  • 鸭子模型是指:"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就 可以被称为鸭子。 "

  • 我们并不关心对象是什么类型,到底是不是鸭子,只关心行为

  • 由于Python是动态语言,所以,传递给函数animal_talk(x)的参数 x 不一定是 Animal 或 Animal 的子类型。任何数据类型的实例都可以,只要它有一个talk()的方法即可。

  • 这是动态语言和静态语言最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存 在,参数正确,就可以调用

class zhifubao():
    def pay(self):
        print("this is zhifubao pay")
class bank():
    def pay(self):
        print("this is bank pay")
​
class weixin():
    def pay(self):
        print("this is weixin pay")
z = zhifubao()
b = bank()
w = weixin()
def pay(obj):    #接口的多种形态,接口的重用
    obj.pay()
pay(z)
Python中的多态- 注意
  • 多态以继承和重写父类方法为前提

  • 多态是调用方法的技巧,不会影响到类的内部设计

多态性的好处
  • 增加了程序的灵活性

  • 以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

  • 增加了程序额可扩展性

  • 通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

  • 多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度)

  • 多态性:一种调用方式,不同的执行效果(多态性)

  • 实现接口重用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号