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'
  • 相关阅读:
    单例模式
    mysql之group_concat函数详解
    json中如何将key中的引号去掉
    show status,修改mysql用户密码 使用
    ThinkPHP连贯查询之子查询
    输入1-53周,输出1-53周的开始时间和结束时间
    Java编辑环境搭建
    Java语言简介
    html中iframe根据子页面内容动态修改高度
    JavaScript---通过正则表达式验证表单输入
  • 原文地址:https://www.cnblogs.com/zhao-peng-/p/9708142.html
Copyright © 2011-2022 走看看