python和java一样,是面向对象的编程语言。在python中,类的定义和java中类似,由关键字class来定义一个类,下面介绍一下python中类的情况,类中有属性(变量)和方法。
一、类的定义
class Animal:
name = '' # 这个是类的属性,也叫实例变量,可以通过self.name来使用
age = 4 # 这个是类变量,可以通过cls.age来使用
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self): # 这个是实例方法,实例方法通常第一个参数为self,代表实例对象本身
print('animal %s age %d barks.' % (self.name, self.age))
@staticmethod # 这个是静态方法,可以由类或实例对象调用,没有区别
def calc(a, b)
return a+b
@classmethod
def run(cls, s): # 这个是类方法,类方法通常第一个参数为cls, 代表类本身
print('animal %s age %d runs a lot.' % (self.name, cls.age)) # 类方法内是不能调用实例属性的
print('animal age %d runs at speed %d.' % (cls.age, s))
if __name__ == '__main__':
a = Animal('xiaogou', 2)
a.bark()
print(a.calc(2, 4))
a.run()
运行程序,看结果
把类方法中对self.name的调用去掉,重新运行。
这里的age 4 取的是类中定义的类变量age=4的值,并不是实例对象a的属性值。
综上,类的静态方法能被类或实例对象调用,类方法也能被类或实例对象调用,类的实例方法只能被实例对象调用。
运行结果
二、设置及访问对象属性:没有init(self)函数时,可以直接设置并修改对象的属性(不建议)
init()函数主要用来初始化类。
如果属性/方法是所有实例共享的,应该保存到类对象中;如果属性/方法是某个实例独有的,应该保存到实例对象中。
class MyClass:
pass
if __name__ =='__main__':
mc1 = MyClass()
mc1.name = 'xiaomi' # 通过类的实例对象去添加属性
print(mc1.name)
mc1.name = 'hongmi' # 通过类的实例对象去修改属性
print(mc1.name)
print(isinstance(mc1, MyClass) # 判断一个对象是否是类的实例