zoukankan      html  css  js  c++  java
  • python面向对象与结构成员之间的关系

    1面向对象结构分析:
    ----面向对象整体大致分为两块区域:
    -------第一部分:静态字段(静态变量)部分
    -------第二部分:方法部分
    --每个区块可以分为多个小部分
    class A:
        country = "美国"   # 静态变量(静态字段)
        __cooage = 20      #私有静态变量(私有静态字段)
        def __init__(self,name,age):     #普通方法(构造方法)
            self.name = name             #对象属性(普通字段)
            self.__age = age             #私有对象属性(私有普通属性)
        def func1(self):       # 普通方法
            pass
        def __func(self):      #私有方法
            pass
        @property
        def age(self):          #属性
            pass
        @classmethod          #类方法
        def class_func(cls):
            # 定义类方法,至少有一个cls参数
            pass
        @staticmethod        # 静态方法
        def stact_func():
            #定义静态方法,无默认参数
            psaa
    2面向对象的私有于公有
    对于每一个类的成员而言都有两种形式:
    -----共有成员,在任何地方都可以访问
    -----私有成员,只有在自己类的内部才可以访问


    ------私有成员和共有成员的访问限制不同:


    静态字段(静态变量)
    --共有静态字段:类可以访问,类内部可以访问,派生类不能访问
    ---私有静态字段:仅类的内部可以访问

    普通字段(对象属性)
    ---共有普通字段:对象可以访问,类内部可以访问,派生类可以访问
    ---私有普通字段:仅类的内部可以访问

    方法:
    ---共有方法:对象可以访问,类内部可以访问,派生类可以访问
    --私有方法:仅类的内部可以访问

    总结:
    对于这些私有成员来说,它们只能在本类的内部使用,不能再本类的外部以及派生类中使用.
    ps:如果要在外部访问,可以通过_类__属性 访问
    为什么可以通过._类__私有成员名?因为类在创建时
    如果遇到私有成员(私有静态字段和私有方法)时
    它会将其保存在内存时自动在前面加上_类名

    3.面向对象的成员
    1)字段
    字段包括:普通字段和静态字段,它们在定义和使用中有所区别,
    最本质的区别就是内存中保存的位置不同.
    普通字段属于实例化对象,
    静态字段属于类


    静态字段在内存中只保存一份
    普通字段在每个对象中都要保存一份
    应用场景:通过类创建对象时,如果每个对象都具有相同的字段,那么就是要静态字段
    2)方法
    方法包括:普通方法,静态方法和类方法,三种方法在内存在内存中都归属于类,区别在于调用方式不一同.
    --普通方法:由对象调用:至少一个self参数;执行普通方法时,自动将调用改方法的对象赋值给self
    --类方法:由类调用;至少一个cls参数;执行类方法时,自动将调用改方法的类复制给cls
    --静态方法:有类调用;无默认参数

    相同点:对于所有的方法而言,均属于类(非对象)中,所以在内存中也只保存一份>
    不同点:方法调用者不同,调用方法时自动传入的参数不同


    classmethod
    ----类方法:通过类名调用方法,类方法中第一个参数约定俗称cls,python自动将类传给cls
    静态方法
    对类中的静态变量进行改变,要用类方法
    继承中,父类得到子类类的类空间

     1 class A:
     2     age =12
     3     def func(self):  #普通方法
     4         print(self)
     5     @classmethod
     6     def func1(cls):   # 类方法,自动添加cls    次方法无需对象参与
     7         print(333)
     8         cls.age = 30
     9         print(cls.age)     #对B类中的内容进行修改
    10 class B(A):
    11     age = 15
    12 B.func1()     #  <class '__main__.B'>
    13 print(B.func1())
    14 print(B.__dict__)    #  30 {'__module__': '__main__', 'age': 30, '__doc__': None}   对B类中的内容进行修改

    不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值
    class A:
        age = 18
        def func2(self):
            print(self)  # self子类的对象,能得到子类空间的任何值
    class B(A):
        age = 22
    b1 = B()
    b1.func2()
    print(b1.func2())
    print(b1.__dict__)

    @staticmethod


    #
    静态方法:
    class A: @staticmethod def login(username,password): if username == "alex" and password == 123: print("登录成功") else: print("登录失败") a = A() a.login("alex",123) #登录成功 # 代码块,清晰 # 复用性.
  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/caodneg7/p/9379412.html
Copyright © 2011-2022 走看看