zoukankan      html  css  js  c++  java
  • python_类与对象总结_继承

    一。总结:

    0 , 什么是类和对象
    类:具备相同特征或者行为的一个群体:
    对象: 个体

    类:模型 (造对象)
    对象: 模型生出来(造出来)具体的东西。

    1. 实例属性和类属性的区别
    实例可以获取 实例属性和类属性
    类只能获取类属性。

    类属性定义:类名下面或者类外面, 可以在其他的方法当中定义,但是不建议

    例子:
    class 类名:
    类属性1 = 属性值

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


    类名.类属性other = 属性值。

    实例属性: 类里面和类外面 __init__ 方法定义,或者 类名().实例属性


    先天具备的属性,不管是类属性,实例属性,通常在类名下面, __init__ 直接定义好。

    后天培养的属性,不管是类还是实例,都可以在 其他的方法当中定义, 类外面定义

    类属性和实例属性:
    类可以访问实例属性吗?? Man.name ?? 不可以
    实例可以访问类属性?? 可以
    如果某一个属性名同时是类属性和实例属性。 一般以调用的方法不同取值类属性和实例属性

    例子:

    class Math:
    name=123
    def __init__(self):
    self.name=456
    print(Math.name)
    print(Math().name)
    运行结果:


    如果在一个具体的场景当中,我不知道这个属性用类属性还是实例属性?? 一般选用实例属性


    2. 方法
    实例方法, 实例具备的,类不一定具备。 类不能调用实例方法 self 获取实例
    类方法, 类具备的, 实例可以获取 类方法可以直接通过 cls 获取类
    静态方法:放在类里面的函数。 def static_methodo
    类(对象).static_methodo


    3. __init__ 生孩子的过程,出厂设置。
    不要写成 __int__

    是对象的初始化过程。通常在里面定义实例属性。
    实例属性的值通过参数传递进来。

    参数必须要赋值给实例属性 self.shuxing = 参数
    才能通过实例调用


    4. self
    类定义的里面表示 对象。

    cls, 类里面表示 类

    5, 继承, 继承时单边的。

    class Phone:
    """手机"""
    def __init__(self, number):
    self.number = number
    def call(self, to, recorded=False):
    """打电话"""
    print(" {} 给 {} 打电话。。".format(self.number, to))
    if recorded:
    self.record()
    def record(self):
    """录音"""
    print("{} 正在录音".format(self.number))

    class SmartPhone(Phone):
    """智能手机"""
    def __init__(self, number, brand):
    self.number = number
    self.brand = brand
    def watch_movie(self, name):
    print("正在看电影{}".format(name))
    注意:父类不能调用子类方法,Phone是父类,SmartPhone为子类,子类拥有父类所有方法包括自身的方法,可对父类方法进行重写
    例子1:父类不能调用子类方法
    Phone("苹果").watch_movie("jack")

    运行结果:

    例子2:子类拥有父类所有方法和自身方法,并可对父类方法进行重写。

    #子类调用父类方法
    SmartPhone("123","苹果").call("jack")
    #子类可以自己定义方法
    SmartPhone("123","苹果").watch_movie("一人之下")

    运行结果:


    6, 重写

    #子类重写父类的方法调用子类时,以子类重写方法为主

    运行结果:


    7, super():超继承

    类和对象:多重继承。

    注意:超继承只继承父类的方法。

    例子:

    class LinZai:
    def __init__(self, brand, model, size):
    pass
    def sell(self, param):
    print("目前正在直播")
    print("没有人来")
    print("巨伤心")
    class Other(LinZai):
    def __init__(self):
    pass
    def sell(self):
    # super() = LinZai('', '', '')
    super().sell('data')
    print("其他主播人很多")
    Other().sell()
    运行结果:

    8.动态获取属性

    1)获取已存在的属性

    class Phone:

    def __init__(self, number):
    self.number = number

    phone = Phone('137')
    print(getattr(phone,'number'))
    运行结果:

    2)获取不存在的数据,若属性不存在那么可以自定义返回值。

    #获取不存在属性
    print(getattr(phone,'name','150'))
    运行结果:

    #若已存在的属性,通过定义默认返回值,返回的是已存在的属性值
    print(getattr(phone,'number','????'))
    运行结果:

    9.设置 set 属性。 

    #设置不存在的实例属性(类属性也可以设置)
    setattr(phone,'name','999')
    print(phone.name)
    运行结果:



  • 相关阅读:
    iis管理器的程序应用池中没有Asp.NET v4.0
    Rowlock、UPDLOCK
    转SQLSERVER 会不会自动加锁
    安装IE11必备更新
    阻止表单提交刷新页面的问题
    C#分屏控件用法实例
    Flex内存泄露解决方法和内存释放优化原则
    DataSet.Clear() Method()
    短文件名漏洞修复
    vs2017创建dotnetcore web项目,并部署到centos7上
  • 原文地址:https://www.cnblogs.com/newsss/p/12925603.html
Copyright © 2011-2022 走看看