Python基础学习——面向对象的基本编程
2020-06-28 10:36:33 来源:易采站长站 作者:易采站长站整理
即
__init__作用是初始化已实例化后的对象。参数通过传参传递到类的实例化操作上。子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__
但如果重写了__init__,实例化子类时,则不会隐式的再去调用超类(即父类)中已定义的__init__
类的实例方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
类的静态方法
静态方法可以使用实例对象调用,也可以使用类进行调用,他的的特点没有参数限制,定义时需要在函数前加@staticmethod
class test:
@staticmethod
def f():
print("hello world")
s=test()
s.f() #实例调用
test.f() #类调用
静态的内存空间是固定的,相对来说更省资源。创实例的创一个实例就要开辟一个新内存,耗费资源。静态方法属于类所有,类实例化前即可使用。非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
注意:静态方法中不能调类属性和方法,也不能调用实例变量,只是类的工具包。因为没有self,也就不能指类本身或实例本身,从而不能调用相应的类属性和类方法。
类的继承
派生类定义如下:
class DerivedClassName(BaseClassName1):
BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:
class DerivedClassName(modname.BaseClassName):
class people:
name=""
age=0
_weight=0 #定义私有属性,私有属性在类外部无法直接进行访问
def __init__(self,a,n,w):
self.name=a
self.age=n
self._weight=w
def f(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承
class student(people):
grade=0
def __init__(self,a,n,w,g):
#调用父类的构函
people.__init__(self,a,n,w)
self.grade=g
def f(self):
print("%s 说: 我 %d 岁。读%d 年纪" %(self.name,self.age,self.grade))
#覆写父类的方法s=student('tom',10,5,5)
s.f()
# tom 说: 我 10 岁。读5 年纪
多类继承
class DerivedClassName(Base1, Base2, Base3):
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。













闽公网安备 35020302000061号