-
如果一個類表現得像一個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__()方法,而是顯示其內存地址。
查看全部 -
class Animal():
????????查看全部 -
**kw? ?可變參數
查看全部 -
在定義繼承類的時候,有幾點是需要注意的:
- class Student()定義的時候,需要在括號內寫明繼承的類Person
- 在__init__()方法,需要調用super(Student, self).__init__(name, gender),來初始化從父類繼承過來的屬性
查看全部 -
open()函數:重要的三個參數
1,文件路徑:指定需要打開的文件路徑
2,打開模式:針對不同文件以及不同操作,會有不同的打開模式
3,編碼:設定打開文件的默認編碼
查看全部 -
__slots__方法:
只允許類擁有某些屬性,不允許外部再次添加屬性,如果外部增添類屬性,將會報錯
查看全部 -
input()函數可以接收外部的輸入。
查看全部 -
1、如果類屬性和實例屬性名字相同時,實例屬性的優先級要高于類屬性
2、通過實例無法修改類的屬性
查看全部 -
如果希望導入模塊的指定部分屬性或函數,那么使用from...import...語句。
使用from ... import as ...語句,as類似重命名,可以把導入的函數或屬性重命名為別的名字。
查看全部 -
如果把一個類實例也變成一個可調用對象,可以實現一個特殊的方法__call__()。
>>> p = Person('Bob', 'Male')
>>> p('Alice') # ==> 用函數的方式調用Person類的實例p
查看全部
舉報