-
对于实例变量,dir()返回所有实例属性,包括__class__这类有特殊意义的属性,返回的数星星是字符串列表,
查看全部 -
类名以大写字母开头
python2中:
查看全部 -
有必要注意的是,返回函数和返回函数值的语句是非常类似的,返回函数时,不能带小括号,而返回函数值时,则需要带上小括号以调用函数。
# 返回函数
def myabs():
return abs
# 返回函数值
def myabs(x):
return abs(x)查看全部 -
如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score使用__slots__ = ('name', 'gender', 'score') 限定Student类的属性,这个时候在外部再次添加动态属性age,将会报错。
>>> student = Student('Bob', 'Male', 99)
>>> student.age = 12 # ==> 动态添加年龄age属性
Traceback (most recent call last):
AttributeError: 'Student' object has no attribute 'age'查看全部 -
如果一个类表现得像一个list,想使用len()函数来获取元素个数时,则需要实现__len__()方法。
通过自定义__len__()方法,可以让len()函数返回相关的结果,如果没有定义__len__()方法的类使用len()函数获取长度时,将会引起异常。
class Class:
def __init__(self, students):
self.students = students
def __len__(self):
return len(self.students)
students = ['Alice', 'Bob', 'Candy']
class_ = Class(students)
len(class_) # ==> 3查看全部 -
直接str(bob) # ==> '<__main__.Person object at 0x7fc77b859c50>'
在类内部定义str后,可以打印任何我们想要的信息
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __str__(self):
return 'name: {}, gender: {}'.format(self.name, self.gender)
bob = Person('Bob', 'Male')
str(bob) # ==> 'name: Bob, gender: Male'终端输入bob # ==> '<__main__.Person object at 0x7fc77b859c50>'
当使用str()时,实际调用的是__str__()方法,而直接输入变量,调用的是__repr__()方法。
也在类中定义rep,终端直接输bob也可以打印任何我们想要的信息
def __repr__(self):
return 'name: {}, gender: {}'.format(self.name, self.gender)>>> bob
'name: Bob, gender: Male'查看全部 -
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)求的是最大公约数,可以举个例子代入(2,4)就清楚了
def __str__(self):
g = gcd(self.p, self.q)
return '{}/{}'.format(int(self.p/g), int(self.q/g))约分
查看全部 -
f = Fib()
print(f(10))
__call__把对象当成一个函数来使用
查看全部 -
参考
查看全部 -
关于调用两种方法的时机
使用print()时
使用%s和f'{}'拼接对象时
使用str(x)转换对象x时
在上述三种场景中,会优先调用对象的__str__()方法;若没有,就调用__repr__()方法;若再没有,则显示其内存地址。
特别地,对于下面两种场景:
用%r进行字符串拼接时
用repr(x)转换对象x时
则会调用这个对象的__repr__()方法;若没有,则不再看其是否有__str__()方法,而是显示其内存地址。
查看全部 -
**kw 可变参数
查看全部 -
在定义继承类的时候,有几点是需要注意的:
- class Student()定义的时候,需要在括号内写明继承的类Person
- 在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性
查看全部 -
open()函数:重要的三个参数
1,文件路径:指定需要打开的文件路径
2,打开模式:针对不同文件以及不同操作,会有不同的打开模式
3,编码:设定打开文件的默认编码
查看全部 -
__slots__方法:
只允许类拥有某些属性,不允许外部再次添加属性,如果外部增添类属性,将会报错
查看全部 -
input()函数可以接收外部的输入。
查看全部
举报