zoukankan      html  css  js  c++  java
  • python 面向对象(二)

      成员共分为三类:   

    一、变量:                     

      - 实例变量(字段)
        - 公有实例变量(字段)
        - 私有实例变量(字段)
      - 类变量(静态字段)
        - 公有类变量(静态字段)
        - 私有类变量(静态字段)

    class Student:
        school = "蓝翔"       #公有的类变量
        __grade = "一年级"    #私有的类变量
        def __init__(self,name):
            self.name = name    #公有的实例变量
            self.__age = 18    #私有的实例变量
    
    stu = Student("Tom")
    print(stu.name)
    # print(stu.__age)      #私有的实例变量不能在类外部访问
    print(Student.school)
    # print(Student.__grade)    #私有的类变量不能在类外部访问

    二、方法                  

      实例方法
        有个self参数


      静态方法 : 如果方法无需使用对象中封装的值,那么就可以使用静态方法

        方法上边有@staticmethod
        参数可有可无


      类方法 : 如果在方法中会使用到当前类,那么就用类方法

        方法上边有@classmethod
        有个cls参数

    class Student:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def dyname(self):       #实例方法
            print(self.name)
        @staticmethod
        def dy(x):              #静态方法:如果方法无需使用对象中封装的值,那么就可以使用静态方法
            print("哈哈哈",x)
        @classmethod
        def dy2(cls):           #类方法:如果在方法中会使用到当前类,那么就用类方法
            print(cls)
    stu = Student("Tom",18)
    stu.dyname()
    Student.dy("s15")
    Student.dy2()

    三、属性                

      方法上有@property

      只有一个self参数 

      调用时无需加括号 对象.方法

      对于简单的方法,当无需传参且有返回值时可以使用 

    class Student:
        def __init__(self):
            pass
    
        @property
        def shuxing(self):
            return 1
    obj = Student()
    print(obj.shuxing)


     四、 类成员的修饰符             

      公有成员: 在任何地方都可以访问

      私有成员: 只能在类的内部访问,不能在外部访问

      私有成员和公有成员的定义不同: 私有成员定义时要加双下划线

     五、主动调用其他类的成员      

      方法一:

        类名.实例方法(自己传self)

    class Base(object):
    
        def f1(self):
            print("bbb")
    
    class Foo(object):
    
        def f1(self):
            print("aaa")
            Base.f1(self)
    
    obj = Foo()
    obj.f1()

      方法二:

        super 按照类的继承顺序,找下一个

        super().f1()

      

    class Base1(object):
    
        def f1(self):
            super().f1()
            print("base1.f1")
    
    class Base2(object):
    
        def f1(self):
            print("base2.f1")
    
    class Foo(Base1,Base2):
        pass
    
    obj = Foo()
    obj.f1()

      

     六、特殊成员               

    #1. 类名() 自动执行 __init__
    obj = Foo(1,2)
    
    #2. 对象() 自动执行 __call__
    ret = obj(6,4,2,k1=456)
    
    #3. 对象['xx']  自动执行 __getitem__
    ret = obj['yu']
    print(ret)
    
    #4. 对象['xx'] = 11  自动执行 __setitem__
    obj['k1'] = 123
    
    #5. del 对象[xx]     自动执行 __delitem__
    del obj['uuu']
    
    #6. 对象+对象         自动执行 __add__
    obj1 = Foo(1,2)
    obj2 = Foo(88,99)
    ret = obj2 + obj1
    print(ret)
    
    #7. with 对象        自动执行 __enter__ / __exit__
    obj = Foo(1,2)
    with obj as f:
        print(f)
        print('内部代码')
     # 8. 真正的构造方法
    class Foo(object):
        def __init__(self, a1, a2):     # 初始化方法
            """
            为空对象进行数据初始化
            :param a1:
            :param a2:
            """
            self.a1 = a1
            self.a2 = a2
    
        def __new__(cls, *args, **kwargs): # 构造方法
            """
            创建一个空对象
            :param args:
            :param kwargs:
            :return:
            """
            return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).
    
    obj1 = Foo(1,2)
    print(obj1)
    
    obj2 = Foo(11,12)
    print(obj2)
  • 相关阅读:
    docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群
    docker搭建基于percona-xtradb-cluster方案的mysql集群
    flask实现基于elasticsearch的关键词搜索建议
    tcp === udp
    re 模块===正则表达式
    模块===包
    析构方法====
    python===属性--类方法
    python====接口类 抽象类===19
    python==继承===18
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9551560.html
Copyright © 2011-2022 走看看