• Python学习 4day__基础知识



    类和对象的成员分析

      类和对象都可以储存成员, 成员可以归类所有,也可以归对象所有
      类存储成员时使用的是与类关联的一个对象
      独享存储成员是存储在当前的对象中
    class A():
        name = "xiaowang"
        age = 16
    
        def say(self):
            self.name = "shaiz"
             self.age = 18
    
    print(A.name)
    print(A.age)
    print(id(A.name))
    print(id(A.age))
    a = A()
    print(a.name)print(a.age)
    print(id(a.name))  #  对比id
    print(id(a.age))
    a.name = "xiaoshabi"
    a.age = 19
    print(a.name)
    print(a.age)
    print(id(a.name))  #  对比id
    print(id(a.age))  

    self

      self在对象的方法中表示当前对象本身,如果通过对象调用一个方法,那么该对象会自动传入到当前
      self不是关键字,理论上可以用任何一个普通变量

    class A():
        name = "xiaowang"
        age = 16
    
        def say(self):
           self.name = "小哥哥"
            self.age = 18
            print("My name is {0}".format(self.name))
            print("My age is {0}".format(self.age))
        def ask():                           # 没有self
            print("Tell me why ")
    
    a = A()
    a.say()
    A.ask()                                  # 要用绑定类名    

    封装

      封装就是对对象进行访问权限限制
      三个级别:
       公开:public
       受保护的:protected
      私有的:private

      私有

        私有是最高级别的封装,只能在当前类或者对象中访问
        封装方法:在成员前面添加两个下划线,表示成员私有
        Python中的私有,并不是真正意义上的私有,只是自动把变量名改了,可以通过__dict__来查看
    1 class Person():
    2     name = "小哥哥"             # 公有
    3     __age = 20                  # 私有
    4 
    5 p = Person()
    6 print(p.name)  # 访问公有
    7 # print(p.age)   # 访问私有///报错
    8 print(Person.__dict__)        # 查看
      受保护的封装

        将对象成员就像一定级别的封装,然后,在类中或者子类中都可以进行访问,但是在外部不可以
        封装方法:在成员前面加一个下划线

      公有

        对成员不进行任何操作即可,任何地方都可以访问

    继承

      继承就是一个类可以获得另外一个类中的成员属性和成员方法
      用来减少代码,增加代码的复用
      所有的类都继承object类,因此所有类都是object类的子类
     1 class Person(object):                # 继承objetc类
     2     name = "laoshi"
     3     age = 16
     4     def sleep(self):
     5         print("我睡了。。。。。")
     6 
     7 class Teacher(Person):                # 继承Person
     8     def make_test(self):
     9         print("考试考试考试")
    10     a = Teacher()
    11     print(a.name)               # Teacherl类继承了person类
    12     print(Teacher.name)         # Teacherl类继承了person类       


    子类和父类定义同一个变量名称,则优先使用子类本身

    1 class person(object):
    2     name = "我是Person"
    3 class Teacher(Person):
    4     name = "我是teacher"
    5 
    6 t = Teacher()
    7 print(t.name)


    子类如果想扩充父类的方法,可以在定义新方法的同事访问父类成员进行代码重用
     1 class Person(object):
     2     name = "我是Person"
     3     age = 19
     4     def work(self):
     5         print("make some money")
     6 class Teache(Person):
     7     name = "我是teacher"
     8     def make_tset(self):
     9         print("attention")
    10     def work(self):
    11         Person.work(self)          # 扩充父类功能只需要调用父类相应的函数
    12         #super().work()             # 扩充的第二种方法
    13        self.make_tset()
    14 
    15 x = Teache()
    16 x.work()

      继承变量函数的查找顺序

        优先查找自己的变量,没有则查找父类
        构造函数如果本类中没有定义,则自动查找调用父类构造函数
        如果有,则不继续向上查找

      构造函数

        是一类特殊的函数
        __init__()函数,每次实例化的时候第一个被自动调用
        主要工作是进行初始化

    1 class sport():
    2     def __init__(self):   # __这就是构造函数
    3         print("一起做运动!")
    4 # 实例化,自动调用__init__
    5 me = sport()    


      super

        首先super不是关键字,它是一个类
        作用是获取MRO列表中的第一个父类
        super与父类没有任何实质性的关系,但super可以调用到父类
      
    单继承和多继承

      单继承:每个类只能继承一个类
      优点:
      继承有序,逻辑清晰,语法简单
      缺点:
       功能不能无限拓展,只能在唯一的一条继承链中拓展
      多继承:每个类允许继承多个类
      优点:
       类的功能拓展方便
      缺点:
      继承关系混乱,隐患多,产生菱形问题


     1 class Fish(object):
     2     def __init__(self, name):
     3         self.name = name
     4 
     5     def swim(self):
     6         print("swiming.......")
     7 
     8 
     9 class Bird(object):
    10     def __init__(self, name):
    11         self.name = name
    12 
    13     def fly(self):
    14         print("flying.......")
    15 
    16 
    17 class Person(object):
    18     def __init__(self, name):
    19         self.name = name
    20 
    21     def work(self):
    22         print("working.......")
    23 
    24 
    25 class Student(Person):                   # 单继承
    26     def __init__(self, name):
    27         self.name = name
    28 stu = Student("Bud")
    29 stu.work()
    30 
    31 class SuperMan(Person, Bird, Fish):       # 多继承
    32     pass
    33 s = SuperMan("Burtit")
    34 s.fly()
    35 s.swim()

    多态

      多态就是同一个对象在不同情况下有不同的状态出现
      多态不是语法,是一种思想
      多态性:一种调用方式,不同的执行效果
      多态:同一种事物的多种形态,如动物分为人类,鸡类,毛类

    类相关函数

      issubclass(): 检测一个类是不是另一个类的子类
      isinstance(): 检测一个对象是否是一个类的实例
      hasatter: 检测一个对象是否有某个成员
      getattr: 获取属性值,必须存在
      setattr:设置属性值,属性必须存在
      delattr:删除属性
      dir(): 获取对象的成员列表
      and so on...


     1 class A():
     2     age = 16
     3 class B(A):
     4     pass
     5 class C():
     6     pass
     7 
     8 print(issubclass(B, A))          # 检测B是否是A的子类
     9 a = A()
    10 print(isinstance(a, A))          # 检测a是否为A的实例
    11 print(getattr(a,"age"))          # 查看a中的age的值
    12 
    13 print(setattr(a, 'age', 199))    # 将a中的age值改为199
    14 print(a.age)
    15 print(delattr(A, 'age'))         # 删除A中age的值
    16 print(A.__dict__)                # 查看发现无age了
    17 print(hasattr(a,'age'))          # 检测a中是否有成员age



    dir(A) # 获取a的成员列表
  • 相关阅读:
    Effective C++:条款14:在中小企业资源管理copying表现
    Linux在iptables教程基本应用防火墙
    C++内存分配和拷贝构造函数写研究
    Codeforces 479E Riding in a Lift(dp)
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/Burtit/p/9320004.html
Copyright © 2020-2023  润新知