首页 > 编程语言 >Python-面向对象

Python-面向对象

时间:2022-08-18 22:33:36浏览次数:50  
标签:__ name Python self 面向对象 amount print def

面向对象

面向对象是一种编程思想, 即按照真实世界的思维方式构建软件系统.

定义类

class 类名[(父类)]:
    类体

创建对象

用类创建对象的过程称为实例化, 是将类这个抽象的概念具体到该类实物的过程.

class Car:  # class Car(object):
    pass    # 类体


car = Car()

类的成员

类的成员.jpg

  • 实例变量 -- 对象个体特有的"数据".

  • 构造方法 -- __init__ 用来创建和初始化实例变量.

  • 实例方法 -- 某个实例或对象个体特有的方法.

  • 类变量 -- 变量属于类, 不属于单个对象.

  • 类方法 -- @classmethod 方法属于类, 不属于实例.

    class Dog:
        family = "犬科"  # 创建和初始化类变量family
    
        def __init__(self, name, age, sex='M'):  # 定义构造方法
            self.name = name  # 创建和初始化实例变量name
            self.age = age    # 创建和初始化实例变量age
            self.sex = sex    # 创建和初始化实例变量sex
    
        @classmethod  # 装饰器
        def show_family(cls):  # 定义类方法
            print(cls.family)
    
        def show_info(self):  # 定义实例方法
            print(self.name, self.age, self.sex)
    
        def bark(self, sound):
            print(self.name, "在叫:", sound, sep='')
    
    
    d = Dog("球球", 2)
    Dog.show_family()  # 犬科
    d.show_info()      # 球球 2 M
    d.bark("汪!")      # 球球在叫:汪!
    

面向对象的特性

封装性

  • 私有变量:

    防止外部调用者随意存取类的内部数据(成员变量), 内部数据会被封装为"私有变量".

  • 私有方法:

    不可以在类的外部访问私有方法.

  • 属性:

    为了实现对象的封装, 在一个类中成员变量应该被设计为私有的, 然后通过公有方法访问.

    class Account:
        __interest_rate = 0.0568  # 私有类变量
    
        def __init__(self, owner, amount):
            self.owner = owner      # 公有实例变量
            self.__amount = amount  # 私有实例变量
    
        @property
        def amount(self):  # 定义amount属性的get()方法. 方法名就是属性名, 即amount.
            return self.__amount
    
        @amount.setter
        def amount(self, amount):  # 定义set()方法, 使用@属性.setter修饰器进行修饰.
            self.__amount = amount
    
        def __get_info(self):  # 私有实例方法
            print("{0} 金额: {1} 利率: {2}. ".format(self.owner,
                                                 self.__amount,
                                                 Account.__interest_rate))
    
        def desc(self):  # 公有实例方法
            self.__get_info()
    
    
    account = Account("Tony", 800.0)
    print(account.amount)  # 800.0
    account.desc()         # Tony 金额: 800.0 利率: 0.0568.
    account.amount = 500.0
    account.desc()         # Tony 金额: 500.0 利率: 0.0568. 
    

继承性

  1. 子类继承父类: 特殊类拥有一般类的全部数据和操作.

    class Animal:
        def __init__(self, name):
            self.name = name  # 实例变量
            print("Animal_1")
    
        def show_info(self):
            print(self.name)
    
    
    class Cat(Animal):
        def __init__(self, name, age):
            super(Cat, self).__init__(name)  # 首先找到父类, 然后把父类的对象转换为子类的对象.
            self.age = age
            print("Cat_1")
    
        def show_info(self):
            super(Cat, self).show_info()
            print(self.age)
            # print(self.name, self.age) 方法重写
    
    cat = Cat("Tom", 2)
    cat.show_info()
    animal = Animal("John")
    animal.show_info()
    
    # Animal_1
    # Cat_1
    # Tom
    # 2
    # Animal_1
    # John
    
  2. 多继承

    class Horse:
        def __init__(self, name):
            self.name = name
            
        def show_info(self):
            print(self.name)
            
        def run(self):
            print("马跑...")
    
    
    class Donkey:
        def __init__(self, name):
            self.name = name
    
        def show_info(self):
            print(self.name)
    
        def run(self):
            print("驴跑...")
            
        def roll(self):
            print("驴打滚...")
    
    
    class Mule(Horse, Donkey):
        def __init__(self, name):
            super(Mule, self).__init__(name)
    
    
    m = Mule("骡宝莉")
    m.show_info()  # 继承Horse的方法
    m.run()        # 继承Horse的方法
    m.roll()       # 继承Donkey的方法
    

多态性

多态性指对象可以表现出多种形态.

  1. 在多个子类继承父类, 并重写父类方法后, 这些子类所创建的对象之间就是多态的.

  2. Python 支持鸭子类型测试[1], Python解释器不检查发生多态的对象是否继承了同一个父类, 只要它们有相同的方法, 它们之间就是多态的.

    class Animal:
        def speak(self):
            print("某种叫声")
    
    
    class Cat(Animal):
        def speak(self):
            print("猫叫")
    
    
    class Dog(Animal):
        def speak(self):
            print("狗叫")
    
    
    class Car:
        def speak(self):
            print("鸣笛")
    
    
    def start(obj):
        obj.speak()  # obj对象指向访问的属性名或方法
    
    
    an1 = Cat()
    an2 = Dog()
    car = Car()
    start(an1)
    start(an2)
    start(car)
    

  1. 一个东西如果它看起来像鸭子, 走起来像鸭子, 叫起来也像鸭子, 那么它就是鸭子. ↩︎

标签:__,name,Python,self,面向对象,amount,print,def
From: https://www.cnblogs.com/khrushchefox/p/16600348.html

相关文章

  • Python入门系列(二)语法风格
    python缩进Python使用缩进来表示代码块,例如if5>2:print("Fiveisgreaterthantwo!")如果跳过缩进,Python将给您一个错误。#下边的写法将会报错if5>2:pri......
  • python爬虫实例: 对指定城市kfc餐厅信息的爬取
    python爬虫实例:对指定城市kfc餐厅信息的爬取要求:爬取指定kfc餐厅数据kfc餐厅查询的url:http://www.kfc.com.cn/kfccda/storelist/index.aspx分析:由于餐厅信息......
  • python链接
    importredis#链接redishost,port,db#建立链接con=redis.StrictRedis(host='127.0.0.1',port=6379,db=4,#默认使用的是0号decode_responses=True)#......
  • 学习python-Day42
    今日学习内容Navicat可视化软件可以充当很多数据库软件的客户端,最主要的用于MySQL下载>>>正版收费>>>找破解版>>>百度查询下载完成后>>>连接>>>MySQL>>>创建连接......
  • MySQL可视化软件(Navicat)部署与使用、python操作MySQL数据库连接(pymysql)
    目录一、Navicat可视化软件1.什么是可视化软件?2.什么是Navicat?二、使用Navicat操作MySQL1.Navicat连接本地2.连接成功后进行后续的操作3.可以直观的看到表与表之间的关系三......
  • python | 算法大神左神(左程云)算法课程 第五节
    TodayNew->python|算法大神左神(左程云)算法课程第五节(第几节我已经搞不清了,随便吧。。)针对b站视频左神算法与数据结构,自己练习对应的python代码相关链接:1️⃣b站视......
  • python获取对象属性的几种方法
    当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?1.使用type()首先,我们来判断对象类型,使用type()函数:基本类型都可以用type()判断:>>>type(123)<......
  • windows下 python virtualenv 虚拟环境安装
    1.  虚拟环境virtualenvironment借助虚拟化技术,把机器中一部分内容独立出来。这部分独立的内容一般被称为“容器”。在这个容器中,我们可以安装需要的依赖包,各个......
  • Python|使用Python实现图像的重采样
    基础知识图像重采样就是从高分辨率遥感影像中提取出低分辨率影像,或者从低分辨率影像中提取高分辨率影像的过程。常用的方法有最邻近内插法、双线性内插法、三次卷积法等。......
  • MySQL多表查询与python操作MySQL
    一、navicateNavicate是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQLServer、MariaDB 和 MongoDB 等不同类型的数据库......