zoukankan      html  css  js  c++  java
  • 成员

    成员

    1.类的成员:在类中所写的内容就是成员。

        class 类名:
            def __init__(self,参数1,参数2...):
                # 属性变量
                self.属性1 = 参数1 
                self.属性2 = 参数2
            # 方法
            def method(self):
                pass
                
        # 在上述代码中__init__和method都属于类的成员方法,又称为实例方法。它需要对象来访问,
           而上方的self.属性1 = 参数1这个代码的含义是给对象设置属性信息。涵义是这个对象的xxx属性是xxx,
           这被称为成员变量或者实例变量再或者被称为字段。
    

    2.类的成员-变量

        在类中变量分为两大类:
    
        1.实例变量(字段):每个实例对象拥有的变量。
        2.类变量(静态变量):一类事物统一拥有的变量。
    
          #例:
            class Person:
                # 类变量表示此类中所有的对象都共享这个变量
                country = '中国'
                def __init__(self,name,num,birthday):
                self.name = name
                self.num = num
                self.birthday = dirthday
                
            p1 = Person('alex',20,'1990年09月26日')
            print(p1.name)    # alex
            print(p1.country) # 中国
            
            
            p2 = Person('wusir',19,'1991年08月25日')
            print(p2.name)   # wusir
            print(p2.country) #中国
    
    
          # 类中的变量是共用的,如果类中变种变量发生改变,其他对象共用的这个变量时也会发生改变。如果某个对象在自身定义
          一个和类中属性相同的变量,其自身这个变量将会给变,不会影响类中变量也不会影响其他对象使用类中变量。        
          例:
            P1 = Person('alex',20,'1990年09月26日')
            p1.country = '移民'
            print(p1.name)    # alex
            print(p1.country)  # 移民
            
            p2 = Person('wusir',19,'1991年08月25日')
            print(p2.name)    # wusir
            print(p2.country) #中国
    
    
          # 类变量,最好是用类名来访问,通过对象名也可以访问但是只能看,不能改变。想要改变只能通过类名来改变。        
          例:
            class Foo:
                count = 0
                def __init__(self):
                    Foo.count += 1
    
            print(Foo.count)  # 0
            Foo()
            Foo()
            Foo()
            print(Foo.count)   # 3
    
         总结:
            实例变量:给对象用的。
            类变量:多个对象共享的,最好是用类名来访问(规范)
    

    3.类的成员-方法

        1.成员方法(实例方法):对象直接访问的方法叫成员方法。        
          例:
            class Computer:
    
                # 实例方法(成员方法)
                def play(self):
                    print('我的电脑')
    
            c = Computer()
            c.play()   # 对象直接去掉用实例方法
                
                
        2.静态方法:静态方法不需要传递self,如果出现一个方法不需要使用成员变量,就可以选择静态方法,
          静态方法需要在我们的方法上加@staticmethod          
          例:
            @staticmethod
            def fare():
                print('我的电脑很厉害,可以飞')
            Computer.fare()  # 类名可以直接访问
            c.fare()   # 对象也可以访问,但最好不要这样使用,以便区分静态方法和实例方法
    
    
        3.类方法:类方法需要在参数列表的第一个位置预留一个位置,通常我们给第一个位置起名叫cls。类方法在被调用的时候不需
          传递实例对象,系统会自动的把,类传递给第一个参数,类方法在编写的时候,需要在类方法上添加@classmethod          
          例:
            class Computer:
                def play(self):
                    print('我的电脑可以玩')
                @staticmethod
                def fare():
                    print('我的电脑很厉害,可以飞')
                @classmethod
                def cal(cls,a,b):
                    print(cls)
                    return a+b
            print(Computer.cal(1,2))  # 此时会自动的把类名传递给类方法的第一个参数
    

    4.类的成员-属性

        属性:属性其实就是通过方法改造过来的一种变量的写法,在方法上面添加一个@propety。     
        例:
            class Person:
                def __init__(self):
                    pass
                @properety
                def age(self):
                    return 1
            p = Person()
            age = p.age
            print(age)
        
        # 应用场景:我们一般在保存数据的时候,不会保存一个人的年龄,因为随着时间的推移,每个人的年龄都在不停的增长。
          如何保存年龄?保存出生年月日,然后用程序来计算,你当前的年龄,实时的时间。这个时候就需要进行计算了,
          计算相当于一个功能,需要写到方法里,但是对于年龄这个属性语言,它应该是一个数值,而不是动作。所以python提供了
          这样的机制,通过方法来描述一个属性。
          
        注:
            1.方法参数只能有一个self
            2.方法上方要写@property
            3.调用的时候,我们不需要写括号,直接当成属性变量来用
            4.这种套路只能取值,不能设置值              
    

    5.私有

        在python中,一般是不提倡设置和使用私有信息的。但是有些场景就需要一些内容不公开。所以在python中使用__作为方法
        或者变量的前缀,这样这个方法或者变量就比变成了一个私有的。
        
        1.私有变量:自己设置,只能自己访问的变量     
          例:
            class Person:
                def __init__(self,laopo,mimi):
                    self.__laopo = laopo    #__表示数据信息私有
                    self.__mimi = mimi
    
            alex = Person('老婆','乡下还有个相好的')
            print(alex.__mimi)  # 私有信息,不会被执行打印
          
          报错:AttributeError: 'Person' object has no attribute '__mimi'
            
            
        私有的内容不会被访问到,但在他自己内部可以随意使用
          例:
            class Person:
                def __init__(self,laopo,mimi):
                    self.__laopo = laopo
                    self.__mimi = mimi
                def gaosuni(self):
                    print('被发现了,公诸于世')
                    return self.__mimi   # 私有内容在自己内部可随意使用
    
            alex = Person('老婆','乡下还有个相好的')
            mimi = alex.gaosuni()  # 通过非私有的方法,访问到他的秘密
            print(mimi) 
          
          注:私有的内容不能直接访问. 但是如果对方开辟了外界访问的通道(公共方法). 
          那可以通过这个公共的方法来获取到私有的内容. 这样做的好处是. 外界, 只能看,
          但是改不了.不单单实例变量有私有的. 类变量(静态变量)一样拥有这样的属性。          
            例:
                class Person:
                    __yuwang = '人的欲望'  # 内心深处的欲望,不能让任何人知道
                    def __init__(self,laopo,mimi):
                        self.__laopo = laopo
                        self.__mimi = mimi
                
                    def gaosuni(self):
                        print('被发现了,公诸于世')
                        return self.__mimi
    
                alex = Person('老婆','乡下还有个相好的')
                mimi = alex.gaosuni()
                print(mimi)
                print(Person.__yuwang)  #  不能访问,会报错
                
                报错: AttributeError: type object 'Person' has no attribute '__yuwang'
                   
          
        2. 私有方法:只能自己访问的方法,别人不能访问            
            例:
                class Person:
                    def __init__(self):
                        pass
                    def __yue(self):
                        print('我要约姑娘')
                    def job(self):
                        print('努力工作')
                p = Person()
                p.__yue()  # 不能执行访问,会报错
          
                报错:AttributeError: 'Person' object has no attribute '__yue'
                
                注:__yue是一个私有方法,只能在类中自己调用,在类外面不能访问
                    job是一个成员方法,并且是一个开放的方法,在类的外界可以被访问到     
          
          
            类中的私有方法也是相对而言的,我们可以通过其他的方法来访问到。          
            例:
                class Person:
                    def __init__(self):
                        pass
                    def __yue(self):
                        print('我要约姑娘')
                    def job(self):
                        print('努力工作')
                        self.__yue()  # 在自己的类中访问自己的其方法,私有的自己也可以用
                p = Person()
                p.job()
    
          
            注:对于私有的内容而言,子类是无法继承的            
            例:
                class Fu:
                    __mimi = '乡下有个相好的'
                class Zi(Fu):
                    pass
                print(Zi.__mimi)  # 子类不能继承父类私有内容,会报错
                          
                报错:AttributeError: type object 'Zi' has no attribute '__mimi'
  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/zhao-peng-/p/9833068.html
Copyright © 2011-2022 走看看