• python类和实例


    摘要:

      python使用class定义了一个类,然后实例化一个类。实例可以调用类里面的方法或属性,当然,类也是可以调用类里面的方法或这属性的。所以这边文章主要是弄清楚调用关系和类的成员。

    一,属性(字段)

    定义类的属性,有的人叫做静态字段,静态字段属于类,当然它也可以被实例调用。

    class Person(object):
        nationality = 'china'
    
        def __init__(self):
            pass
    p1 = Person()
    print p1.nationality
    print Person.nationality
    

      

    如上图,可见定义1个类的属性只需要在class下面定义1个变量即可。至于调用方式可以实例化1个类出来调用亦或者直接使用类调用。建议,最好使用类调用。

    • 静态字段在内存中只保存一份
    • 普通字段在每个对象中都要保存一份

    所以,通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段,即在class下面直接定义变量。

    2,私有字段(私有属性)

    class Person(object):
        nationality = 'china'
    
        def __init__(self,name,age):
            self.name=name
            self.age=age
    p1 = Person('tom',22)
    print p1.name
    print p1.age
    print Person.name
    

      

    如上图可知,self.name ,self.age 为实例的属性,可以通过实例化一个类,通过实例化出来的类的对象来调用属性。

    定义私有字段的时候,用双下划线开头。

    通过 def __init__(self)函数来初始化1个类,在初始化的同时绑定一些属性实例里面

    class Person(object):
        nationality = 'china'
        __gender='man'
        def __init__(self,name,age,salary):
            self.name=name
            self.age=age
            self.__salary=salary
    
        def privacte(self):
           print self.__gender
           print  self.__salary
    
    p1 = Person('tom',22,10000)
    p2 = Person('jack',23,20000)
    p1.privacte()
    

     

    从上图可知,1个实例或者类是无法直接调用类里面的私有字段的,只能将私有字段放入函数中,通过调用函数的方法,间接的调用私有字段。

    当然,如果你非要在外部调用类里面的私有字段:对象._类名__私有属性 即 print p1.Person__salary  这种方式也是可以的(主要用于测试)!!!

    二,方法(函数)

    方法包括:普通方法,静态方法,类方法,三种方法都在内存中都属于类,区别在于调用方式不同。

    • 普通方法:由对象调用,至少一个self参数;执行普通方法时,自动调用该方法的对象赋值给self.
    • 私有方法:由对象调用,需要构建一个函数,通过构建的函数执行,最后通过对象调用该构建函数方可执行。
    • 静态方法:由类调用
    • 类方法:顾名思义,由类调用,至少一个cls参数,执行类的方法时候,自动将调用该方法的类赋值给cls;

    1,普通方法

    class Person(object):
        nationality = 'china'
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def action(self):
            print self.name + ' go to beijing to see the model'
    p1 = Person('tom',22)
    p2 = Person('jack',23)
    

      

    2,私有方法(通私有字段非常相似,也是无法直接调用,只能通过构造1个函数,间接调用)

    class Person(object):
        nationality = 'china'
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def __dabaojian(self):
            print self.name + ' go to dabaojian'
        def temp(self):
            self.__dabaojian()
    p1 = Person('tom', 22)
    p2 = Person('jack', 23)
    p1.temp()
    

      

     

     如上图可知,定义一个私有方法,需要用def __+名称的方式开头,私有方法无法直接供对象调用,需要构造1个函数,通过调用该函数间接完成调用私有方法。

    3,静态方法(类和对象皆可调用)

    class Person(object):
        nationality = 'china'
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        @staticmethod
        def temp():
            print 'I am a static method'
    
    p1 = Person('tom', 22)
    p2 = Person('jack', 23)
    p1.temp()
    Person.temp()
    

      

    4,类方法

    class Person(object):
        nationality = 'china'
        def __init__(self, name):
            self.name = name
        @classmethod
        def cls1(cls):
            print 'i am a class method'
            print cls.nationality
        @staticmethod
        def temp():
            print 'I am a static method'
    p1 = Person('tom')
    p1.cls1()
    Person.cls1()
    

      

  • 相关阅读:
    收集最好的Mac软件和使用方法
    为什么使用Binder而不是其他IPC机制
    Android什么时候进行View中Background的加载
    Android属性动画源代码解析(超详细)
    JMockit工具总结
    路由器和交换机的区别
    6种 @Transactional 注解失效场景
    20个使用 Java CompletableFuture的例子
    书写高质量SQL的30条建议
    Netty之什么是 TCP 拆、粘包?如何解决?
  • 原文地址:https://www.cnblogs.com/lin1/p/8260435.html
Copyright © 2020-2023  润新知