python类的创建

Python中,类通过class关键字定义,类名以大写字母开头

>>>classPerson(object):           #所有的类都是从object类继承

              pass                 #pass先不做任何处理,先跳过,为了防止语法错误

 

 

创建类的属性

>>>class Person(object):

         address = 'Earth'                       #类的属性直接在类内部定义,当实例属性和类属性重名时,实例属性优先级高

         def __init__(self, name):

                self.name = name

>>>Person.address                              #直接通过类.属性可以访问

'Earth'

>>>p1=Person('A')                              

>>>p1.address                                    #通过创建类的实例,也可以通过实例.属性访问

'Earth'

>>>Person.address='KKKK'                       #类的属性可以动态修改

>>>Person.address

'KKKK'

>>>p1.address                                    #类的属性一经修改,所有访问的属性值也随之更改

'KKKK'

 

实例的创建

创建实例使用类名+(),类似函数调用的形式创建:

例如:

>>>class Person(object):

             pass

 

>>>p1 = Person()                      #创建实例

>>>p1.name = 'Bart'                   #创建实例属性

>>>p2 = Person()

>>>p2.name = 'Adam'

 

 

初始化实例属性

>>>class Person(object):

             class=1                                              #定义类属性

             def __init__(self, name,age):         #__init__(self,属性1,属性2....)self代表实例,通过self访问实例对象的变量和函数

             self.name = name

             self.__age=age                                        #实例的私有属性无法从外部访问,但是,从类的内部是可以访问的

#定义实例方法

             def get_name(self):

                   return self.__age                              #实例方法,定义在类内部,可以访问实例的私有属性__age

#定义类方法

             @classmethod

             def how_many(cls):                                   #通过@classmethod标记类方法,类方法的第一个参数为clscls.class相当于Person.class

                  return cls.class                                #类方法中无法调用任何实例的变量,只能获得类引用

>>>p1 = Person('Bob',12)

>>>print p1.get_age()                                            #实例方法的调用,self不需要显式传入

 

classDog():

    '''this is a method describew dog'saction'''

    character = 'funny'

    def __init__(self, name,color,age):

        self.name = name

        self.color = color

        self.age = age

 

    def Eat(self, food):

        print('this %s dog names %s likes toeat %s' %(self.color,self.name,food))

 

dog1= Dog('laifu', 'black', 5)

 

dog1.Eat('bone')

 

thisblack dog names laifu likes to eat bone

 

Python普通方法、静态方法、类方法

 

 

#-*-coding:utf-8-*-

#普通方法,类方法,静态方法的区别

 

__metaclass__= type

 

 

classTst:

    name = 'tst'

 

    data = 'this is data'

 

    # 普通方法

    def normalMethod(self, name):

        print self.data, name

 

    # 类方法,可以访问类属性

    @classmethod

    def classMethod(cls, name):

        print cls.data, name

 

    # 静态方法,不可以访问类属性

    @staticmethod

    def staticMethod(name):

        print name

测试

 

三种方法都可以通过实例来调用,但是静态方法和类方法无法访问实例属性,所以更改了tst.data仅对普通方法起了作用

tst= Tst()

tst.data= 'this is new'

tst.normalMethod('name')

tst.staticMethod('name')

tst.classMethod('name')

 

#结果

thisis new name

name

thisis data name

区别

 

普通方法不能通过类名调用,但是静态方法和类方法是可以的

#error普通方法必须通过实例调用

#Tst.normalMethod('name')

Tst.classMethod('name')

Tst.staticMethod('name')

 

#结果

thisis data name

name

总结

 

普通方法,可以通过self访问实例属性

defnormalMethod(self,data)

 

类方法,可以通过cls访问类属性

@classmethod

def classMethod(cls,data)

 

静态方法,不可以访问,通过传值的方式(可传多值)

@staticmethod

def staticMethod(data)

 

@staticmethod

    def staticmethod(name, age):

        print("%s is %s" %(name,age))

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/80773336