您的位置:首页 > 编程语言 > Python开发

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

2018-01-04 15:55 916 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python