[Python]面向对象编程---类定义(1)

一、类

1、类定义

所有类必须继承至少一个父类,如果类没有继承任何其他父类,object将作为默认的父类。object是所有类之母。
eg1: 类仅作为容器对象来共享名字空间

class MyData(object):
    pass
>>> from MyData import *
>>> mathObj = MyData()    # 把类作为名称空间容器
>>> mathObj.x = 4         # mathObj.x 和 mathObj.y是实例对象的独有属性,不是类MyData的属性。这些属性是动态的,不需要在任何地方预先声明或者赋值。
>>> mathObj.y = 5
>>> mathObj.x + mathObj.y
9
>>> mathObj.x * mathObj.y
20

eg2: 定义一个包含方法的类

class AddrBookEntry(object):
    "address book entry class"
    def __init__(self, nm, ph):
        self.name = nm
        self.phone = ph
        print("Created instance for:", self.name)
    def updatePhone(self, newph):
        self.phone = newph
        print("Updated phone# for:", self.name)
>>> john = AddrBookEntry('John Doe', '77665544')    # 创建实例
Created instance for: John Doe  
>>> jane = AddrBookEntry('Jane Doe', '11223344')    # 创建实例
Created instance for: Jane Doe
>>> john
<MyData.AddrBookEntry object at 0x00AD5E30>
>>> john.name                                      # 访问实例属性
'John Doe'
>>> john.phone
'77665544'
>>> john.updatePhone('87665544')                   # 方法调用(通过实例)
Updated phone# for: John Doe
>>> john.phone
'87665544'
eg3: 定义子类
class EmplAddrBookEntry(AddrBookEntry):
    """Employee Address Book Entry class"""
    def __init__(self, nm, ph, id, em):          # 如果需要,每个子类最好定义自己的构造器,否则,基类的构造器会被调用
        AddrBookEntry.__init__(self, nm, ph)     # 如果子类重写基类的构造器,需要显式调用基类的构造器。
        self.empid = id                          # 显式传递self实例对象给基类构造器,因为我们不是在该实例中,而是在一个子类实例中调用那个方法  
        self.email = em                          # 调用非绑定方法
    def updateEmail(self, newem):
        self.email = newem
        print("Update e-mail address for:", self.name)
>>> john = EmplAddrBookEntry('John Doe', '77665544', '28', 'jone@qq.com')
Created instance for: John Doe
>>> john.name
'John Doe'
>>> john.updatePhone(87665544)                  # 调用父类的方法updatePhone()更新电话号码
Updated phone# for: John Doe
>>> john.phone
87665544
>>> john.updateEmail('john@126.com')           # 调用子类的方法updateEmail()
Update e-mail address for: John Doe
>>> john.email
'john@126.com'  

2、方法

方法定义在类定义中,但只能被实例所调用。也就是说:

(1)定义类和方法

(2)创建一个实例

(3)用这个实例调用方法

参数self在所有的方法声明中都存在,这个参数代表实例对象本身。当用实例调用方法时,由解释器悄悄地传递给方法。

一般的方法需要用到这个实例(self),而静态方法和类方法不需要。类方法需要类而不是实例。

class MyDataWithMethod(object):   # 定义类
    def printFoo(self):           # 定义方法
        print("You invoked printFoo()!")
>>> myObj = MyDataWithMethod()
>>> myObj.printFoo()
You invoked printFoo()!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值