OOP

oop_simplestclass.py

# 面向過程Procedure-oriented的編程方式 就是通過函數(shù)組織起數(shù)據(jù)
# 面向?qū)ο?則是將數(shù)據(jù)與功能進(jìn)行組合 將其分裝在"對象"中
# 類 Class 可以產(chǎn)生一種Type
# 對象 Object 是類的實例Instance
# 在Python里整數(shù)也是一個對象,它是int類的對象
# 但是在C Java里整數(shù)是原始內(nèi)置類型

# 字段Field是 對象里用來存儲數(shù)據(jù)的變量 一種是對象(實例)變量 一種是類變量
# 方法Method是 對象里實現(xiàn)某些功能的函數(shù)
# 字段和方法統(tǒng)稱為 類的屬性
# 在Python里 Field + Method = Class
# 類通過class關(guān)鍵字定義


class Person:
    pass    # 通過pass可以創(chuàng)建一個空代碼塊

p = Person()
print(p)

oop_methond.py

# 類的方法與普通函數(shù)不一樣的地方在于  它的參數(shù)列表必須帶有一個self(參數(shù)名字叫self是約定俗成的)參數(shù),而且必須是開頭
# 不需要為self賦值 
# example:  Myclass 類下面有一個實例 myobject 
#           你去調(diào)用它的方法 myobject.method(arg1,arg2)
#           Python會把它自動轉(zhuǎn)成Myclass().(myobject,arg1,arg2)
# 所以即使你沒有其他的參數(shù),self參數(shù)也是必須的。self參數(shù)相當(dāng)于Java的this指針         

class Person:
    # @classmethod
    # 在加了上面那句裝飾器以后就可以通過Person.say_hi()直接調(diào)用了
    # 否則就要用Person().say_hi()來調(diào)用
    def say_hi(self):
        print('Hello, how are you?')
    
p = Person()
p.say_hi()
# 上面兩句也等價于 Person().say_hi()
Person().say_hi()

oop_init.py

# Python中有很多方法的名稱具有特殊意義
# __init__方法在類的對象被實例化Instantiated時運行(類似Java構(gòu)造函數(shù))
# __init__方法用來初始化操作

class Person:
    def __init__(self,name):
        self.name = name
        
    def say_hi(self):
        print('Hello, my name is {0}'.format(self.name))

p = Person('takkum')
p.say_hi()

oop_objvar.py

# 字段是綁定到Bound類或者對象的命名空間Namesoace的變量
# 這些變量僅在類與對象所存在的上下文中有效 這就是他們被稱作命名空間的原因


# 類變量是共享的  他們可以被屬于該類的所有實例訪問 它只有一個副本
# 對象變量由類的每一個獨立的實例所擁有 它有屬于自己的副本

class Robot:
    '''表示有一個帶有名字的機器人。'''
    # 一個類變量,用來計數(shù)機器人數(shù)量
    population = 0
    
    def __init__(self,name):
        '''初始化數(shù)據(jù)'''
        self.name = name
        print('(Initializing {})'.format(self.name))
        
        # 當(dāng)有機器人被創(chuàng)建時,機器人
        # 將會增加人口數(shù)量
        Robot.population += 1
    
    def die(self):
        '''我掛了。'''
        print("{} is being destroyed!".format(self.name))
        Robot.population -= 1
        
        if Robot.population == 0:
            print("{} was the last one.".format(self.name))
        else:
            print("There are still {:d} robots working.".format(Robot.population))
    
    def say_hi(self):
        '''來自機器人的誠摯問候
            
        沒問題,你做得到。'''
        print('Greetings, my masters call me {}.'.format(self.name))
        
    # 裝飾器
    @classmethod
    def how_many(cls):
        '''打印出當(dāng)前人口數(shù)量'''
        print("We have {:d} robots.".format(cls.population))
        
droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()

droid2 = Robot("C-3P0")
droid2.say_hi()
Robot.how_many()

print("Robots have finished their work. So let's destroy them.")
droid1.die()
droid2.die()

Robot.how_many()
# 等價于 self.__class__.how_many()
# 在數(shù)據(jù)成員前面用雙下劃線作為前綴 __privatevar 
# Python會使用名稱調(diào)整Name-mangling 使其成為一個私有變量


# 訪問類的文檔說明
# Robot.__doc__
# 訪問類的方法的文檔說明
# Robot.say_hi.__doc__
print(Robot.__doc__)
print(Robot.__init__.__doc__)
print(Robot.how_many.__doc__)

oop_subclass.py

# 繼承
# 基類 Base Class 或者超類 Superclass
# 派生類 Derived Class 或者子類 Subclass

class SchoolMember:
    '''代表任何學(xué)校里的成員。'''
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print('(Initialized SchoolMember: {})'.format(self.name))
    
    def tell(self):
        '''告訴我有關(guān)的細(xì)節(jié)。'''
        print('Name:"{}" Age:"{}"'.format(self.name,self.age),end=" ")
    
    
class Teacher(SchoolMember):
    '''代表一位老師。'''
    def __init__(self,name,age,salary):
        SchoolMember.__init__(self,name,age)
        self.salary = salary
        print('(Initialized Teacher: {})'.format(self.name))
    
    def tell(self):
        SchoolMember.tell(self)
        # {;d} 代表輸出的是整數(shù) C語言里面就是%d
        print('Salary: "{:d}"'.format(self.salary))
    
class Student(SchoolMember):
    '''代表一位學(xué)生。'''
    def __init__(self,name,age,marks):
        SchoolMember.__init__(self,name,age)
        self.marks = marks
        print('(Initialized Student:{})'.format(self.name))
        
    def tell(self):
        SchoolMember.tell(self)
        print('Marks: "{:d}"'.format(self.marks))

t = Teacher('Mrs.Wang',40,30000)
s = Student('Swaroop',25,95)

# 打印一行空白
print()

members = [t,s]
for member in members:
    # 對師生
    member.tell()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容