Python学习笔记 - 面向对象高级编程

Python学习笔记 - 面向对象高级编程

根据廖雪峰的Python教程做成的笔记,其中不包含全部知识点,仅是重点或是容易发生混淆或者忘记的部分。

1. 使用slots

由于Python可以在程序执行过程中向class添加成员变量,为了防止随意添加,可以使用__slots__变量指定可以添加的成员变量。

class Student():
    __slots__ = ('name', 'age')

# 程序执行
s1 = Student()
s1.name = 'Tom'
s1.age = 10
s1.score = 99  # 此行代码会报错,因为slots中没有指定score

2. 定制类

class中凡是__xxx__形式的变量或函数名都是有特殊意义的,除__slots__,__init__()外,还有很多。

  • __str__()
class Student():
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 测试
s1 = Student('Tom', 16)
print(s1)

# 输出:
# <__main__.Student object at 0x000000000092E780>

显然输出不够直观,使用__str__()后:

class Student():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return 'Student object (name:%s, age:%d)' % (self.name, self.age)

# 测试
s1 = Student('Tom', 16)
print(s1)

# 输出:
# Student object (name:Tom, age:16)

下面这些方法目前感觉华而不实,暂时不说了,用到的时候再补充。
- __iter__()
- __next__()
- __getitem__()
- __getattr__()
- __call__()

3. 枚举类

定义枚举类的两个方法:

  • 方法1:
    使用枚举类,此方法默认枚举的第一个成员的值为1。
from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

# 输出:
# Jan => Month.Jan , 1
# Feb => Month.Feb , 2
# Mar => Month.Mar , 3
# Apr => Month.Apr , 4
# May => Month.May , 5
# Jun => Month.Jun , 6
# Jul => Month.Jul , 7
# Aug => Month.Aug , 8
# Sep => Month.Sep , 9
# Oct => Month.Oct , 10
# Nov => Month.Nov , 11
# Dec => Month.Dec , 12
  • 方法2:
    从枚举类继承,此方法可以自定义枚举的值。
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

for name, member in Weekday.__members__.items():
    print(name, '=>', member, ',', member.value)

# 输出:
# Sun => Weekday.Sun , 0
# Mon => Weekday.Mon , 1
# Tue => Weekday.Tue , 2
# Wed => Weekday.Wed , 3
# Thu => Weekday.Thu , 4
# Fri => Weekday.Fri , 5
# Sat => Weekday.Sat , 6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值