1.类属性的定义
因为类是特殊的对象,所以也具有属性,也有方法)。定义类的方法:只需要使用赋值语句,定义类属性。常见用法用来记录这个类定义的对象的次数。
class Tool(object):
count = 0
def __init__(self,name):
self.name = name
Tool.count += 1
tol1 = Tool("futou")
tol2 = Tool("langtou")
print(Tool.count)
输出结果:
2
用Tool这个类创建了tol1和tol2两个对象。
属性获取机制:类名.属性名
2.类方法
语法:
@classmethod
def 类方法名(cls):
pass
实例
class Tool(object):
count = 0
@classmethod
def show_tool_count(cls):
print("对象数量%d"%cls.count)
def __init__(self,name):
self.name = name
Tool.count += 1
tol1 = Tool("futou")
tol2 = Tool("langtou")
tol1.show_tool_count()
输出结果:
对象数量2
类方法与实例方法类似,在实例方法内部中,调用类中定义的属性,使用self.属性名进行访问,而在类方法内部中,调用类属性,使用cls.类属性名进行访问。可以使用cls.类方法调用其它类的方法。使用类名.调用类方法。
3.静态方法
在类内部定义方法时不需要使用任何属性,则可以将方法定义为静态方法。
格式:
@staticmethod
def 方法名()
pass
实例:
class Dog:
@staticmethod
def run():
print("小狗跑。。。")
#通过类名.方法使用静态方法时,不需要创建对象
Dog.run()
输出结果:
小狗跑。。。
4.实例方法、类方法、静态方法使用原则
1)实例方法:当方法内部需要访问实例属性,可以通过self.属性名进行访问。注意:当方法内部既需要访问实例属性也需要访问类属性时,使用实例方法。
2)类方法:当方法内部需要访问类属性,可以通过cls.类属性进行访问。
3)静态方法:当方法内部即不需要访问类属性,也不需要访问实例属性。
实例:
class Game(object):
#历史最高分
top_score = 0
def __init__(self,player_name):
self.name = player_name
def __str__(self):
return "玩家姓名为:%s"%self.name
@staticmethod
def show_help():
print("帮助信息:让僵尸进入大门")
@classmethod
def show_top_score(cls):
#在类方法内部访问类属性cls.类属性
print("当前最高分为:%d"%cls.top_score)
def start_game(self):
print("%s开始游戏"%self.name)
#查看帮助信息(静态方法无需创建对象,直接使用类名.静态方法就可以使用)
Game.show_help()
#查看历史最高分(类方法无需创建对象,直接使用类名.类方法就可以使用)
Game.show_top_score()
#创建游戏对象(对象的实例方法必须创建对象之后使用)
game = Game("xiaoming")
game.start_game()
输出结果:
帮助信息:让僵尸进入大门
当前最高分为:0
xiaoming开始游戏
5.继承
继承的目的时实现代码的重用。相同的代码不需要重新编写。在子类中使用super().父类方法()
实例:
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class Xiaotianquan(Dog):
def fly(self):
print("飞")
def bark(self):
#1 针对子类特有需求编写方法
print("嗷嗷叫")
#2 使用super调用原本在父类中的方法
super().bark()
#3 增加子类代码
print("$#%2")
wangcai = Xiaotianquan()
wangcai.eat()
wangcai.drink()
wangcai.bark()
print(wangcai)
输出结果为:
吃
喝
嗷嗷叫
汪汪叫
$#%2
6.多态
不同子类调用相同父类方法产生不同结果,以继承和重写父类为前提。
实例:
class Dog(object):
def __init__(self,name):
self.name = name
def game(self):
print("%s玩球" % self.name)
class Xiaotiandog(Dog):
def game(self):
print("%s在天上玩耍" % self.name)
class Person(object):
def __init__(self,name):
self.name = name
def game_with(self,dog):
print("%s和%s愉快的玩耍" % (self.name,dog.name))
#让狗玩耍
dog.game()
#创建一个狗对象
wangwang = Dog("wangwang")
#创建小明对象
xiaoming = Person("小明")
#让小明和狗玩
xiaoming.game_with(wangwang)
输出结果:
小明和wangwang愉快的玩耍
wangwang玩球