版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daihuimaozideren/article/details/80758454
Python的类定义相对java要简单的多。Python类没有修饰符,成员对象的定义也相对灵活。
首先,需要了解一下点
(1)成员函数的第一个参数必须是self。默认名为self,当然可以rename,只需要保证其是成员函数的第一个参数即可。
(2)将属性或方法前添加两个下划线“_”,可将其变为私有属性和私有方法,类外无法访问。
(3)构造函数只有一个,__init__,不能重载。当创建一个类时,自动调用__init__方法。
(4)成员变量,可以不用提前声明(例如,后面例子中,Person类中的变量idcard和bankcard)。若声明了成员变量,则必须赋值(例如后面例子中,idCard中的三个成员变量)。
接下来,看一个例子
from demo.obj.person import Person
if __name__ == '__main__':
personA=Person()
personA.getPersonInfo()
personA.getBankCardInfo()
print("address=",personA.idcard.address)
print("money=",personA.bankcard.__money)
print("money=",personA.bankcard.__getBalance())
from demo.obj.bankCard import bankCard
from demo.obj.idCard import idCard
class Person:
'''
classdocs
'''
def __init__(self):
self.idcard=idCard()
self.bankcard=bankCard("1122334455",100)
def getPersonInfo(self):
self.idcard.printInfo()
def getBankCardInfo(self):
self.bankcard.printInfo()
class idCard:
'''
classdocs
'''
age=0
address ="BJ"
name="breakloop"
def printInfo(self):
print("age=",self.age)
print("address=",self.address)
print("name=",self.name)
class bankCard:
'''
classdocs
'''
ID="1234567890"
__money=0
def __init__(self, cardid,money):
self.ID=cardid
self.__money=money
def __getBalance(self):
print("balance=",self.__money)
def printInfo(self):
self.__getBalance()
Person类中包含两个成员,分别为idCard和bankCard。idCard包括id, name,address,bankCard包括card id和__money,其中money是私有变量,__getBalance是私有方法。
虽然,下面两句在编译时,并未出错,但在执行时,将会提示找不到对应的变量和方法。
print("money=",personA.bankcard.__money)
print("money=",personA.bankcard.__getBalance())
相应输出如下
age= 0
address= BJ
name= breakloop
balance= 100
address= BJ
AttributeError: 'bankCard' object has no attribute '__money'
AttributeError: 'bankCard' object has no attribute '__getBalance'
再来看一下类的继承。需要了解两点
(1)可以继承多个类。若多个父类间存在相同的方法,或属性,则按照父类的顺序进行查找调用。
(2)重写父类函数。当父类方法无法满足子类需求时,子类方法可以重写,覆盖父类方法。
例如,
class classA:
'''
classdocs
'''
def printInfo(self):
print("classA")
class classB:
'''
classdocs
'''
def printInfo(self):
print("classB")
def hello(self):
print("hello")
from demo.obj.classA import classA
from demo.obj.classB import classB
class classC(classA,classB):
'''
classdocs
'''
def hello(self):
print("hello, it's classC")
当我们定义一个classC对象,并调用printInfo,hello方法时,相应输出印证了上面两个继承要点。
C=classC()
C.printInfo()
C.hello()
classA
hello, it's classC
从以上两个示例中可以看出,Python的类操作,还是很朴素的。
class classC(classA,classB): #继承声明
C=classC() #创建类对象
print("address=",personA.idcard.address) #访问成员变量