1. 程式人生 > >python-面向物件增強版

python-面向物件增強版

class Person:
    def __init__(self, name, id, gender, birth):
        self.name = name # 例項變數  物件裡的變數
        self.id = id
        self.gender = gender
        self.birth = birth


p = Person("wusir", "10086", "不詳", "1900-12-15")
print(p.birth)
p.birth = "1840-5-6"
print(p.birth)

# 例項變數一般使用    物件.屬性

print
(p.name)
class Computer:

    # 例項方法
    def play(self):
        print("電腦可以掃雷")

    # 在定義例項方法的時候. 必須給出一個引數 self
    # 形參的第一個引數, 自動的把物件給傳遞進來
    def work(self): # self 是當前類的物件
        print(self)
        print("電腦用來工作")

c = Computer()
c.work() # 呼叫的時候不需要手動給出self
print(c)

# 字串操作.  列表操作. 字典操作. 元組操作.....
# s = "你好啊" # s.replace("你", "我")
class Person:

    country = "大清"

    def __init__(self, name, gender):
        self.name = name
        self.gender = gender


p = Person("武sir", "未知")
p2 = Person("太白", "兩性")

Person.country = "中國"  # 類變數最好是使用類名來訪問
# p.country = "大清" #  大坑::沒有修改類變數
# p2.country = "大明"
print(p.country) # 類變數可以給物件使用 print(p2.country) # 類變數可以給物件使用
class Person:

    # 例項方法
    def chi(self):
        print("人會吃")

    @classmethod  # 裝飾器, 此時這個方法是一個類方法
    def he(cls): # 此時接收到的cls是類名
        # print(cls)
        print("人會喝")


# 用物件訪問
# p = Person()
# p.he() # 在呼叫類方法的時候. 預設的把類名傳遞給類方法
# print(Person)


# 類方法一般用類名去訪問
Person.he() # 類方法
class Person:

    @staticmethod # 靜態方法
    def yue():
        print("fsadf")


# 靜態方法可以使用物件訪問. 也可以使用類名訪問. 但是一般推薦使用類名訪問
p = Person()
p.yue()

# 推薦使用類名訪問
Person.yue()
class Person:
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth  # 2000  2018

    # 年齡 -> 應該是算出來的. 而不是直接儲存
    @property # 把一個方法更改成一個屬性, 每次拿屬性的時候都會自動的去執行這個方法
                # 方法的返回值就是屬性值
    def age(self):  # 例項方法
        print("我是方法")
        return 2018 - self.birth


p1 = Person("武sir", "未知", 2000)
print(p1.age) # 看著像一個變數一樣使用, 實際上這裡是呼叫的一個方法
print(p1.age)
# p1.age = 26 # 不可以的, 因為age是一個方法. 不是一個變數
class Person:

    __qie = "潘潘" # 類變數

    def __init__(self, name, mimi):
        self.name = name
        self.__mimi = mimi # 私有內容 例項變數

    def gaosu(self):
        print(f"把祕密告訴了太白, 第二天所有人都知道了{self.__mimi}")
        print(Person.__qie) # 私有的類變數只能在類中呼叫
        # return self.__mimi

    def __yue(self): # 私有的例項方法
        print("我要和寶寶約")

    @staticmethod
    def __koujiao():
        print("韓志遠希望和嫂子一起摳腳")

    @classmethod
    def __fangqi(cls):
        print("和嫂子一起放氣")

# p = Person("wusir", "和嫂子的故事")
# # print(p.__mimi) # 私有的內容只能在類裡面呼叫
# p.gaosu()


# print(Person.__qie)

# p = Person("wusir", "嫂子的故事")
# p.__yue()
# Person.__koujiao()