<
>

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从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

暂时禁止评论

微信扫一扫

易采站长站微信账号