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()

  

原文地址:https://www.cnblogs.com/lin1/p/8260435.html