python3 面向對象、類、繼承、組合、派生、接口、子類重用父類方法


對象是特征(變量)與技能(函數)的結合體
是一系列對象共同的特征與技能的集合體

class teacher:

    lesson = "python"

    def __init__(self,name,color,age):  # 只干初始化的活
        self.name = name
        if not isinstance(name,str):
            raise TypeError
        self.color = color
        self.age = age

    def jineng(self):
        print('新技能')

t1 = teacher('as','pink',13)   # t1可以成為teacher類的一個實例,或對象
class teacher:
    # 特征
    school = 'oldboy'
    lesson_default = 'python'

    # 技能
    def __init__(self,name,age,sex,lesson2):
        self.name = name
        self.age = age
        self.sex = sex
        self.lesson2 = lesson2
    def speak(self):
        print('講課')
    def eat(self):
        print('吃飯')

t1 = teacher('alex','23','','運維')
t2 = teacher('egon','24','','運維')


類的用法一:實例化產生對象
類的用法二:屬性引用
print(teacher.__dict__)


# 對象的屬性
# 類的屬性

# 屬性,就是一個字典
# 對象查看一個屬性,先從對象屬性找,如果沒有,就從類找



繼承:
繼承是用來創建新的類的一種方式,好處是可以減少重復代碼
繼承是類與類之間的關系,是一種什么是什么的關系

class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def walk(self):
        print('%s is walking' %self.name)
    def foo(self):
        print('from father %s' %self.name)

class Teacher(People):
    school = 'oldboy'
    def __init__(self,name,age,sex,level,salary):
        People.__init__(self,name,age,sex)
        self.level = level
        self.salary = salary
    def bar(self):
        People.foo(self)
        print('from teacher')

class Student(People):
    pass

t = Teacher('egon',13,'male',10,3000)
# print(t.name,t.age)
print(t.__dict__)
t.walk()
t.bar()

組合
組合是一種什么有什么的關系

class People:
    def __init__(self, name, age, year, mon, day):
        self.name = name
        self.age = age
        self.birth = Date(year, mon, day)   # 組合

    def walk(self):
        print('%s is walking' % self.name)


class Date:
    def __init__(self, year, mon, day):
        self.year = year
        self.mon = mon
        self.day = day

    def tell_birth(self):
        print('出生於<%s>年 <%s>月 <%s>日' % (self.year, self.mon, self.day))


class Teacher(People):
    def __init__(self, name, age, year, mon, day, level, salary):
        People.__init__(self, name, age, year, mon, day)
        self.level = level
        self.salary = salary

    def teach(self):
        print('%s is teaching' % self.name)


class Student(People):
    def __init__(self, name, age, year, mon, day, group):
        People.__init__(self, name, age, year, mon, day)
        self.group = group

    def study(self):
        print('%s is studying' % self.name)

t = Teacher('egon', 12, 1991, 12, 12, 10, 1000)
t.teach()
t.walk()
print(t.level)
print(t.birth.tell_birth())


接口
1.子類必須要有父類的方法
2.子類實現的方法必須跟父類的方法的名字一樣

class File:#定義接口Interface類來模仿接口的概念,python中壓根就沒有interface關鍵字來定義一個接口。
    def read(self): #定接口函數read
        pass

    def write(self): #定義接口函數write
        pass

class Txt(File): #文本,具體實現read和write
    def du(self):
        print('文本數據的讀取方法')

    def xie(self):
        print('文本數據的讀取方法')

class Sata(File): #磁盤,具體實現read和write
    def read(self):
        print('硬盤數據的讀取方法')

    def write(self):
        print('硬盤數據的讀取方法')

class Process(File):
    def read(self):
        print('進程數據的讀取方法')

    def write(self):
        print('進程數據的讀取方法')

txt=Txt()
disk=Sata()
process=Process()

txt.du()
# disk.read()
# process.read()
 
        
 
         
         
        
子類實現的方法必須跟父類的方法的名字一樣
import abc

class File(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass

    @abc.abstractmethod
    def write(self):
        pass

class Txt(File):  # 文本,具體實現read和write
    def read(self):
        pass

    def write(self):
        pass

t = Txt()

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM