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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值