#继承
class Contact:
all_contacts = []
def __init__(self,name,email):
self.name = name
self.email = email
Contact.all_contacts.append(self)
class Supplier(Contact):
def order(self,order):
print("%s order to %s" %(order,self.name))
#代码调试
C:\Users\39621>python -i d:\2019\py1.py
>>> s1=Supplier("cc","123@qq.com")
>>> s1.order("rrr")
rrr order to cc
>>> s1.all_contacts
[<__main__.Contact object at 0x00000289E019AFC8>, <__main__.Supplier object at 0x00000289E019E1C8>]
>>> c1.all_contacts
[<__main__.Contact object at 0x00000289E019AFC8>, <__main__.Supplier object at 0x00000289E019E1C8>]
>>> Contact.all_contacts
[<__main__.Contact object at 0x00000289E019AFC8>, <__main__.Supplier object at 0x00000289E019E1C8>]
>>> Supplier.all_contacts
[<__main__.Contact object at 0x00000289E019AFC8>, <__main__.Supplier object at 0x00000289E019E1C8>]
class ContactList(list):
def search(self,name):
matching_contacts = []
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
return matching_contacts
class Contact:
all_contacts = ContactList()
def __init__(self,name,email):
self.name = name
self.email = email
Contact.all_contacts.append(self)
#代码调试
C:\Users\39621>python -i d:\2019\py1.py
>>> c1=Contact("cc","123@qq.com")
>>> c2=Contact("zz","1234@qq.com")
>>> c3=Contact("bb","12345@qq.com")
>>> Contact.all_contacts
[<__main__.Contact object at 0x000002767FF5E108>, <__main__.Contact object at 0x000002767FF5E208>, <__main__.Contact object at 0x000002767FF5E308>]
>>> Contact.all_contacts.search("cc")
[<__main__.Contact object at 0x000002767FF5E108>]
>>> Contact.all_contacts.search("cczz")
[]
class LongNameDict(dict):
def longest_key(self):
longest = None
for key in self:
if not longest or len(key) > len(longest):
longest = key
return longest
#代码调试
C:\Users\39621>python -i d:\2019\py1.py
>>> d=LongNameDict()
>>> d
{}
>>> d["cc"]=18
>>> d
{'cc': 18}
>>> d["zz"]=20
>>> d
{'cc': 18, 'zz': 20}
>>> d.items()
dict_items([('cc', 18), ('zz', 20)])
>>> d.longest_key()
'cc'
>>> d["cbb"]=30
>>> d
{'cc': 18, 'zz': 20, 'cbb': 30}
>>> d.longest_key()
'cbb'
#重写
class Contact:
all_contacts = []
def __init__(self,name,email):
self.name = name
self.email = email
Contact.all_contacts.append(self)
class Friend(Contact):
def __init__(self,name,email,phone):
Contact.__init__(self,name,email)
self.phone = phone
#多重继承
class MailSender:
def send_mail(self,message):
print("Sending mail to " + self.name)
print("Sending content: " + message)
class EmailableContact(Contact,MailSender):
pass
class Contact:
all_contacts = []
def __init__(self,name,email):
self.name = name
self.email = email
Contact.all_contacts.append(self)
class AddressHolder:
def __init__(self,street,city,state,code):
self.street = street
self.city = city
self.state = state
self.code = code
class Friend(Contact,AddressHolder):
def __init__(self,name,email,phone,street,city,state,code):
Contact.__init__(self,name,email)
AddressHolder.__init__(self,street,city,state,code)
self.phone = phone
#钻石继承的问题
#BaseClass的call_me方法被调用了两次。
class BaseClass:
num_base_calls = 0
def call_me(self):
print("Base Class")
BaseClass.num_base_calls += 1
class LeftSubclass(BaseClass):
num_left_calls = 0
def call_me(self):
BaseClass.call_me(self)
print("Left Class")
LeftSubclass.num_left_calls += 1
class RightSubclass(BaseClass):
num_right_calls = 0
def call_me(self):
BaseClass.call_me(self)
print("Right Class")
RightSubclass.num_right_calls += 1
class Subclass(LeftSubclass,RightSubclass):
num_sub_calls = 0
def call_me(self):
LeftSubclass.call_me(self)
RightSubclass.call_me(self)
print("Sub Class")
Subclass.num_sub_calls += 1
#改为super().call_me()调用一次BaseClass.call_me()
class BaseClass:
num_base_calls = 0
def call_me(self):
print("Base Class")
BaseClass.num_base_calls += 1
class LeftSubclass(BaseClass):
num_left_calls = 0
def call_me(self):
super().call_me()
print("Left Class")
LeftSubclass.num_left_calls += 1
class RightSubclass(BaseClass):
num_right_calls = 0
def call_me(self):
super().call_me()
print("Right Class")
RightSubclass.num_right_calls += 1
class Subclass(LeftSubclass,RightSubclass):
num_sub_calls = 0
def call_me(self):
super().call_me()
print("Sub Class")
Subclass.num_sub_calls += 1
s=Subclass()
s.call_me()