在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标记类方法,类方法的第一个参数为cls,cls.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))