zoukankan      html  css  js  c++  java
  • class 类的小总结

    一、类的变量

    001、类的基本方法和变量

    01、类里面有:
        类方法(实例方法):分为"静态方法""类方法",还有"成员方法"
        类变量(也叫静态变量):每一个被创建的对象都有这个类变量,可以通过"obj.类变量名" 来访问
        实例变量(也叫字段):每个对象在创建的时候,都需要__init__(self) 初始化,然后拥有这个类的实例变量
    02、修改类的类变量需要用类来改变:
        Person.aper="修改类变量"   那么,对象访问这个类变量时(obj.aper),将会显示修改后的 "修改类变量"
    03、修改实例变量可以用对象来改变,但是只针对"当前这个对象"  有用,比如:p1.name="小明",则p1.name="",  p2.name="原来的实例变量名"  p2 还是显示原来创建对象时的名字

    看下面的代码:

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
    
        def dig(self): # 实例方法或成员方法
            aper="dog的你好"
            print("实力方法dig")
    
    
    
    print(Person.count)
    p1=Person("ming",12)
    p1.aper="你不好"
    # 通过对象访问 类变量和 实例变量
    print(p1.name)
    print(p1.aper)
    
    Person.aper="你好的啊"
    
    p2=Person("ok",24)
    print(p2.aper)
    
    print(Person.count)
    结果显示:
    ''' 
    0
    ming
    你不好
    你好的啊
    2
    '''

    002、类里面的方法的说明

    01、类里面有:
        类方法(实例方法):分为"静态方法""类方法",还有"成员方法"
        
        类变量(也叫静态变量):每一个被创建的对象都有这个类变量,可以通过"obj.类变量名" 来访问
        实例变量(也叫字段):每个对象在创建的时候,都需要__init__(self) 初始化,然后拥有这个类的实例变量

    A、成员方法:其实就是对象能直接方法 (obj.method()) 访问

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
    
        def dig(self): # 实例方法或成员方法
            aper="dog的你好"
            print("实力方法dig")
    # 访问成员方法,也就是实例方法 dig()
    p1=Person("ming",45)
    p1.dig()  # 打印:  实力方法dig

    B、静态方法(staticmethod),其实就是不用给他传递参数self,不需要使用成员变量,但是需要在这个方法上加上 @staticmethod 就是静态方法了,

    关于访问静态方法,特别提醒

    一般是使用   "类名.静态方法()"  访问,例如下面的
    Person.func()  # 打印:  静态方法
    
    p1.func() # 对象也可以访问. 但最好不要这么⼲. 以便于区分静态⽅法和实例⽅法
    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
    
        def dig(self): # 实例方法或成员方法
            aper="dog的你好"
            print("实力方法dig")
        
        @staticmethod  # 静态方法,不需要传值
        def func():
            print("静态方法")
            
    # 访问静态方法:
    Person.func()  #   # 打印:  静态方法

    C、 类方法,在被调用的时候,也不需要传递值,但是会给其默认为一个参数 cls ,在传递的时候,自动将类传递给这个cls,同时需要在这个方法上加上 @classmethod 来说明这是一个 类方法

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量,对象可以直接访问
            self.age=age
            Person.count+=1
    
        def dig(self): # 实例方法或则类方法
            aper="dog的你好"
            print("实力方法dig")
    
        @staticmethod  # 静态方法
        def func():
            print("静态方法")
    
        @classmethod
        def func02(cls,a,b):
            print("类方法的类为:",cls)
            return a+b
    
    
    p1=Person("ming",45)
    # 通过对象访问 类方法,不建议使用对象反问类方法和静态方法,这样利于区分 实力方法和类方法,静态方法
    print(p1.func02(1,2))  # 类方法的类为: <class '__main__.Person'>   3
    
    # 通过类访问 类方法
    print(Person.func02(2,3))  # 类方法的类为: <class '__main__.Person'>    5

    003、私有变量,对象不能直接访问

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age,addr): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
            self.__addr=addr
    
        def dig(self): # 实例方法或则类方法
            aper="dog的你好"
            print("实力方法dig")
    
        @staticmethod  # 静态方法
        def func():
            print("静态方法")
    
        @classmethod
        def func02(cls,a,b):
            print("类方法的类为:",cls)
            return a+b
    
    
    p1=Person("小白",14,"大街一号")
    # 对象访问实例变量 # 可以直接访问
    print(p1.name)    # 小白
    print(p1.age)     # 14
    # 对象访问私有变量  # 会报错,不能访问
    # print(p1.__addr)   # AttributeError: 'Person' object has no attribute 'addr'
    # 类访问私有变量  # 也不能访问
    print(Person("小黑",45,"大街34号").__addr)  # AttributeError: 'Person' object has no attribute '__addr'

    A、通过公共方法来访问私有变量

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age,addr): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
            self.__addr=addr
    
        # 定义公共方法来访问私有变量
        def  gongg(self):
            print("公共方法访问私有变量")
            return self.__addr
        
        
        def dig(self): # 实例方法或则类方法
            aper="dog的你好"
            print("实力方法dig")
    
        @staticmethod  # 静态方法
        def func():
            print("静态方法")
    
        @classmethod
        def func02(cls,a,b):
            print("类方法的类为:",cls)
            return a+b
    # 对象通过公共方法访问私有变量
    p1=Person("小白",14,"大街一号")
    print(p1.gongg())  # 打印: 公共方法访问私有变量     大街一号
    
    # 类通过公共方法访问私有变量
    print(Person("小黑",45,"大街34号").gongg())  # 打印:  公共方法访问私有变量   大街34号

    004、私有方法 也就是单下划线的方法 def __func02(self): 这种。私有方法只能类中自己调用(方法之间互相调用)

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age,addr): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
            self.__addr=addr
    
        # 定义公共方法来访问私有变量
        def  gongg(self):
            print("公共方法访问私有变量")
            return self.__addr
    
        def dig(self): # 实例方法或则类方法
            aper="dog的你好"
            print("实力方法dig")
    
        @staticmethod  # 静态方法
        def func():
            print("静态方法")
    
        @classmethod
        def func02(cls,a,b):
            print("类方法的类为:",cls)
            return a+b
    
        # 定义私有方法
        def __func02(self):
            print("这个是私有方法")
    p1=Person("小白",14,"大街一号")
    
    # 对象访问私有方法,无法访问
    print(p1.__func03)  # 报错:AttributeError: 'Person' object has no attribute '__func03'
    
    # 类访问私有方法,无法访问
    print(Person.__func03)  # AttributeError: type object 'Person' has no attribute '__func03'

    B、同理需要访问的话,可以定义公共的成员方法来访问这个私有方法

    class Person:
        count=0
        aper="你好" # 这个是类变量
        def __init__(self,name,age,addr): # 实例方法或则类方法
            self.name=name  # 实例变量,创建的对象都有这几个变量
            self.age=age
            Person.count+=1
            self.__addr=addr
    
        # 定义公共方法来访问私有变量
        def  gongg(self):
            print("公共方法访问私有变量")
            return self.__addr
    
        def dig(self): # 实例方法或则类方法
            aper="dog的你好"
            print("实力方法dig")
    
        @staticmethod  # 静态方法
        def func():
            print("静态方法")
    
        @classmethod
        def func02(cls,a,b):
            print("类方法的类为:",cls)
            return a+b
    
        # 定义私有方法
        def __func03(self):
            print("这个是私有方法")
    
        # 定义公共的开放方法来访问这个私有方法
        def open(self):
            return self.__func03()
    
    
    
    p1=Person("小白",14,"大街一号")
    
    # 对象通过开放方法来访问私有方法
    p1.open()
    
    # 类通过开放方法来访问私有方法
    Person("ming",45,"四号街").open()
     
  • 相关阅读:
    .net 面试题 没事多看看。。。。
    分享一下我记忆23种设计模式的方法 <转。。>
    再次写给我们这些浮躁的程序员 《搜集的。。。》
    C#验证邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP类.. (转后整理)
    javascript和jquery使用技巧集
    jQuery 增加 删除 修改select option .
    设计模式(二)
    JavaScript string 字符串类型的扩展方法
    26个jQuery使用技巧
    jBPM开发入门指南(1)
  • 原文地址:https://www.cnblogs.com/one-tom/p/13381342.html
Copyright © 2011-2022 走看看