Python3学习笔记:类

18 篇文章 1 订阅
18 篇文章 1 订阅

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) #访问成员变量

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值