-
通過(guò)函數(shù)isinstance()可以判斷一個(gè)變量的類型。
查看全部 -
lass Student(Person):
? ?def __init__(self, name, gender, score):
? ? ? ?super(Student, self).__init__(name, gender)
? ? ? ?self.score = score
student = Student('Alice', 'girl', 100)
print(student.name) # ==> Alice
print(student.gender) # ==> girl
print(student.score) # ==> 100在定義繼承類的時(shí)候,有幾點(diǎn)是需要注意的:
class Student()定義的時(shí)候,需要在括號(hào)內(nèi)寫明繼承的類Person
在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來(lái)初始化從父類繼承過(guò)來(lái)的屬性
查看全部 -
Python定義類方法
在上一節(jié)課,為了操作實(shí)例對(duì)象的私有屬性,我們定義了實(shí)例方法;同樣的,如果需要需要操作類的私有屬性,則應(yīng)該定義類的方法。
默認(rèn)的,在class中定義的全部是實(shí)例方法,實(shí)例方法第一個(gè)參數(shù) self 是實(shí)例本身。
要在class中定義類方法,需要這么寫:class Animal(object): ? ? __localtion = 'Asia' ? ? def __init__(self, name, age): ? ? ? ? self.name = name ? ? ? ? self.age = age ? ? @classmethod ? ? def set_localtion(cls, localtion): ? ? ? ? cls.__localtion = localtion ? ? @classmethod ? ? def get_localtion(cls): ? ? ? ? return cls.__localtion print(Animal.get_localtion()) # ==> Asia Animal.set_localtion('Afica') print(Animal.get_localtion()) # ==> Africa
和實(shí)例方法不同的是,這里有兩點(diǎn)需要特別注意:
類方法需要使用@classmethod來(lái)標(biāo)記為類方法,否則定義的還是實(shí)例方法
類方法的第一個(gè)參數(shù)將傳入類本身,通常將參數(shù)名命名為 cls,上面的 cls.__localtion 實(shí)際上相當(dāng)于Animal.__localtion。
查看全部 -
Python定義實(shí)例方法
上一節(jié)課提到,私有屬性沒(méi)有辦法從外部訪問(wèn),只能在類的內(nèi)部操作;那如果外部需要操作私有屬性怎么辦?這個(gè)時(shí)候可以通過(guò)定義類或者實(shí)例的方法來(lái)操作私有屬性,本節(jié)課先來(lái)介紹實(shí)例方法。
實(shí)例的方法指的就是在類中定義的函數(shù),實(shí)例方法的第一個(gè)參數(shù)永遠(yuǎn)都是self,self是一個(gè)引用,指向調(diào)用該方法的實(shí)例對(duì)象本身,除此以外,其他參數(shù)和普通函數(shù)是完全一樣的。class Person(object): ? ? def __init__(self, name): ? ? ? ? self.__name = name ? ? def get_name(self): ? ? ? ? return self.__name
在上面的定義,name是實(shí)例的私有屬性,從外部是無(wú)法訪問(wèn)的,而get_name(self) 就是一個(gè)實(shí)例方法,在實(shí)例方法里面是可以操作私有屬性的,注意,它的第一個(gè)參數(shù)是self。
另外,__init__(self, name)其實(shí)也可看做是一個(gè)特殊的實(shí)例方法。
通過(guò)定義get_name(self)方法,在外部就可以通過(guò)這個(gè)方法訪問(wèn)私有屬性了。p = Person('Alice') print(p.get_name()) # ==> Alice
注意,在外部調(diào)用實(shí)例方法時(shí),是不需要顯式傳遞self參數(shù)的。
查看全部 -
在類屬性和實(shí)例屬性同時(shí)存在的情況下,實(shí)例屬性的優(yōu)先級(jí)是要高于類屬性的,
查看全部 -
__init__ 這里是雙下劃線
查看全部 -
Python類的定義與實(shí)例化
class Person: ?pass
class Person(): pass
class Person(object): ?pass定義了類之后,就可以對(duì)類進(jìn)行實(shí)例化了,實(shí)例化是指,把抽象的類,賦予實(shí)物的過(guò)程。比如,定義好Person這個(gè)類后,就可以實(shí)例化多個(gè)Person出來(lái)了。
創(chuàng)建實(shí)例使用類名+(),類似函數(shù)調(diào)用的形式創(chuàng)建:class Person(object): ?pass xiaohong = Person() xiaoming = Person()
查看全部 -
class A(object):
? ?def __init__(self, a):
? ? ? ?print ('init A...')
? ? ? ?self.a = a
class B(A):
? ?def __init__(self, a):
? ? ? ?super(B, self).__init__(a)
? ? ? ?print ('init B...')
class C(A):
? ?def __init__(self, a):
? ? ? ?super(C, self).__init__(a)
? ? ? ?print ('init C...')
class D(C, B):
? ?def __init__(self, a):
? ? ? ?super(D, self).__init__(a)
? ? ? ?print ('init D...')
d=D('d')結(jié)果(class D(C,B) ==> 先執(zhí)行B再執(zhí)行C):
??????????init A...
????????? init B...
???????? ?init C...
??????????init D...
查看全部 -
在類屬性和實(shí)例屬性同名的情況下,實(shí)例屬性的優(yōu)先級(jí)是要高于類屬性的,在操作實(shí)例的時(shí)候,優(yōu)先是操作實(shí)例的屬性。
查看全部 -
import time
def performance(unit):
? ? def perf_decorator(f):
? ? ? ? def wrapper(*args, **kwargs):
? ? ? ? ? ? t1 = time.time()
? ? ? ? ? ? r = f(*args, **kwargs)
? ? ? ? ? ? t2 = time.time()
? ? ? ? ? ? t = (t2 - t1) * 1000
? ? ? ? ? ? if unit == 'ms':
? ? ? ? ? ? ? ? t = (t2 - t1) * 1000 * 1000
? ? ? ? ? ? print('call {}() in {}{}'.format(f.__name__,t,unit))
? ? ? ? ? ? return r
? ? ? ? return wrapper
? ? return perf_decorator
@performance('ms')
def factorial(n):
? ? return reduce(lambda x,y:x + y,range(1, n+1))
factorial(10)
查看全部 -
import time
def performance(f):
? ? def fn(*args, **kw):
? ? ? ? t1 = time.time()
? ? ? ? r = f(*args, **kw)
? ? ? ? t2 = time.time()
? ? ? ? print('call %s() in %fs' %(f.__name__,(t2 - t1)))
? ? ? ? return r
? ? return fn
@performance
def ffa(n):
? ? return reduce(lambda x,y: x + y, range(1,n+1))
? ??
print(ffa(10))
查看全部 -
# Enter a code
import socket
server = socket.socket() # 1.新建 socket
server.bind(('127.0.0.1', 8999)) # 2.綁定IP和端口(其中127.0.0.1為本機(jī)回環(huán)IP)
server.listen(5) # 3.監(jiān)聽連接
s, addr = server.accept() #4. 接受連接
print('connect addr :{}'.format(addr))
content = s.recv(1024)
print(str(content, encoding = 'utf-8')) #接受來(lái)自客戶端的消息,并編碼打印出來(lái)\
s.close()
import socket
client = socket.socket() #1.新建socket
client.connect(('127.0.0.1', 8999)) #2.連接服務(wù)端(注意,IP和端口要和服務(wù)端一致)
client.send(bytes('hello world, hello socket', encoding = 'utf-8')) #發(fā)送內(nèi)容,注意發(fā)送的是字節(jié)字符串
client.close()
查看全部 -
注意應(yīng)該是self 不是類名
查看全部 -
? 在上面的代碼中,localtion就是屬于Animal這個(gè)類的類屬性,此后,通過(guò)Animal()實(shí)例化的所有對(duì)象,都可以訪問(wèn)到localtion,并且得到唯一的結(jié)果。
? 類屬性也是可以動(dòng)態(tài)添加和修改的,需要注意的是,因?yàn)轭悓傩灾挥幸环荩愿淖兞耍袑?shí)例可以訪問(wèn)到的類屬性都會(huì)變更:
注意應(yīng)該是Animal(類名) 不是self
查看全部 -
# Enter a code
class Fib(object):
? ? def __init__(self, num):
? ? ? ? self.num = num
? ? ? ? self.res = []
? ? ? ? a = 0
? ? ? ? b = 1?
? ? ? ? for x in range(num):
? ? ? ? ? ? self.res.append(a)
? ? ? ? ? ? a,b = b, a + b
? ??
? ? def __str__(self):
? ? ? ? return str(self.res)
? ??
? ? def __len__(self):
? ? ? ? return self.num
fib = Fib(10)
print(fib)
print(len(fib))
查看全部
舉報(bào)