一、类方法、静态方法
1. 静态方法
静态方法的定义: @staticmethod装饰,参数不用self;
访问特性:不能引用或访问实例属性,可以通过类.类变量访问类属性;
调用方法:可以用类.类实例或类实例.静态方法名来调用;
本质:在类中的一个普通函数而已,使面向对象程序中函数归属于类,易于代码管理;
用法:与类相关,但不依赖或改变类与实例;创建不同的实例;把类相关工具方法放入类中;
2. 类方法
类方法的定义:@classmethod,必须提供参数cls;
访问特性:不能引用或访问实例属性;
调用方法:可以用类.类实例调用;
继承特性:继承时,传入的类变量cls是子类,而非父类;
用法: 与类相关,但不依赖或改变类与实例;工厂方法,创建类实例,完成有关预处理;在类内调用静态方法时不用硬编码类名;
作页:编写一个色子类:1.具有6个面,每个面为1种颜色;2.每种颜色代表一个数值(1-6);3.实现一个通过颜色计算两种其代表数值和的静态方法;4.实现一个类方法(gen_dice)用于产生这个类的实例;
回答:
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 11 14:43:52 2020
@author: cool girl
"""
class Dice:
dic={"red":1,"blue":2,"yellow":3,"black":4,"white":5,"purple":6}
def __init__(self,fir,sec,value):
self.fir=fir
self.sec=sec
self.value=value
@staticmethod
def add_two(sur1,sur2):
return Dice.dic[sur1]+Dice.dic[sur2]
@classmethod #类方法产生了一个object
def gen_dice(cls,color1,color2):
return cls(color1,color2,cls.add_two(color1,color2))
def show(self):
print(self.fir,self.sec,self.value)
print(Dice.add_two("red","blue"))
a=Dice.gen_dice("blue","yellow")
a.show()
二、类的继承与方法重载
3. 类的继承是面向对象编程的优点之一;
继承的特点: 减少代码和灵活定制新类;子类具有父类的属性和方法;子类不能继承父类的私有属性/方法;子类可以添加新的方法;子类可以修改父类的方法;
继承的语法:定义类时,在类名后: (继承的类名);多重继承时,括号中放多个父类名,逗号分隔开;.__base__可以查看类继承的父类名字;.__bases__可以查看类继承的父类名字;
4. 重载的语法: 直接定义和父类同名的方法;
修改父类的方法:在重载的方法中调用父类方法,同时添加相应的业务逻辑,多重继承时如何调用父类方法;
class A:
def foo(self):
print('a')
class B:
def foo(self):
print('b')
class C(A,B):
pass
c=C()
c.foo()
#输出结果
a
class D(B,A):
pass
D().foo()
#输出结果
b