-
如果一個類表現(xiàn)得像一個list,想使用len()函數(shù)來獲取元素個數(shù)時,則需要實現(xiàn)__len__()方法。
通過自定義__len__()方法,可以讓len()函數(shù)返回相關(guān)的結(jié)果,如果沒有定義__len__()方法的類使用len()函數(shù)獲取長度時,將會引起異常。
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>'
在類內(nèi)部定義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>'
當(dāng)使用str()時,實際調(diào)用的是__str__()方法,而直接輸入變量,調(diào)用的是__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)求的是最大公約數(shù),可以舉個例子代入(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__把對象當(dāng)成一個函數(shù)來使用
查看全部 -
參考
查看全部 -
關(guān)于調(diào)用兩種方法的時機
使用print()時
使用%s和f'{}'拼接對象時
使用str(x)轉(zhuǎn)換對象x時
在上述三種場景中,會優(yōu)先調(diào)用對象的__str__()方法;若沒有,就調(diào)用__repr__()方法;若再沒有,則顯示其內(nèi)存地址。
特別地,對于下面兩種場景:
用%r進行字符串拼接時
用repr(x)轉(zhuǎn)換對象x時
則會調(diào)用這個對象的__repr__()方法;若沒有,則不再看其是否有__str__()方法,而是顯示其內(nèi)存地址。
查看全部 -
class Animal():
????????查看全部 -
**kw? ?可變參數(shù)
查看全部 -
在定義繼承類的時候,有幾點是需要注意的:
- class Student()定義的時候,需要在括號內(nèi)寫明繼承的類Person
- 在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來初始化從父類繼承過來的屬性
查看全部 -
open()函數(shù):重要的三個參數(shù)
1,文件路徑:指定需要打開的文件路徑
2,打開模式:針對不同文件以及不同操作,會有不同的打開模式
3,編碼:設(shè)定打開文件的默認編碼
查看全部 -
__slots__方法:
只允許類擁有某些屬性,不允許外部再次添加屬性,如果外部增添類屬性,將會報錯
查看全部 -
input()函數(shù)可以接收外部的輸入。
查看全部 -
1、如果類屬性和實例屬性名字相同時,實例屬性的優(yōu)先級要高于類屬性
2、通過實例無法修改類的屬性
查看全部 -
如果希望導(dǎo)入模塊的指定部分屬性或函數(shù),那么使用from...import...語句。
使用from ... import as ...語句,as類似重命名,可以把導(dǎo)入的函數(shù)或?qū)傩灾孛麨閯e的名字。
查看全部 -
如果把一個類實例也變成一個可調(diào)用對象,可以實現(xiàn)一個特殊的方法__call__()。
>>> p = Person('Bob', 'Male')
>>> p('Alice') # ==> 用函數(shù)的方式調(diào)用Person類的實例p
查看全部
舉報