1. 程式人生 > >python類的成員

python類的成員

一.例項變數:簡單的來說就是給物件賦值

class Person:
    def __init__(self, name, card_no, height, weight, address, laopo):
        # 例項變數. 給物件賦值
        self.name = name
        self.card_no = card_no
        self.height = height
        self.weight = weight
        self.address = address
        self.laopo = laopo

p1 = Person("馬化騰", "123456789123456781", 1.60, 180, "深圳市南山區南山法院", "不知道")
p1.company = "騰訊" # 新增例項變數-> 欄位 -> 屬性(java)

p2 = Person("劉強東", "789456132456789123", 1.65, 190, "宿遷", "奶茶妹妹")

print(p2.name)
print(p1.laopo)
2類變數的修改只能通過類名來完成
class Person:
    country = "中國"
    def __init__(self,name, age):
        self.name = name
        self.age = age

# Person.country = "大清"
# print(Person.country) # 直接使用類名進行訪問
p1 = Person("alex", 185)
p1.country = "大清" # 添加了一個例項變數
print(p1.name)
print(p1.country)

p2 = Person("wusir", 145)
print(p2.name)
print(p2.country)
# 類變數的修改只能通過類名來完成

3例項的方法:

class Car:
    def run(self):
        print("會跑的車")

    def cul(self, a, b):
        return a + b

    def jump(self):
        print("you jump i jump")

c = Car()
c.run() # 呼叫例項方法
print(c.cul(1 , 3))
c.jump()

二,類的方法

class Person:
    def chi(self): # 例項方法
        print("人在吃")

    # 類方法
    @classmethod # 類方法
    def he(cls): # cls 類
        print(cls)
        print("我是喝")

    @staticmethod
    def shui():  # 在類中定義的一個普通函式
        print("和你睡不等於睡你 -- 姜文")

    @staticmethod
    def 上天(height):  # 在類中定義的一個普通函式
        print("上天%s" % height)

# print(Person)
# Person.he()

# p = Person()
# p.he() # 不管用物件還是用類去訪問類方法. 預設傳遞進去的是類

Person.shui()
Person.上天(500)
# p = Person()
# p.shui()

屬性

class User:
    def __init__(self, name, birthday, qq, email):
        self.name = name
        self.birthday = birthday
        self.qq = qq
        self.email = email

    # 方法
    @property # 可以把一個方法變成一個屬性
    def age(self):
        return 2018 - self.birthday
    '''
        @property
        1. 函式只能有一個self引數. 
        2. 需要有返回值
        3. 不能賦值
        4. 調⽤的時候, 我們不需要寫括號. 直接當成屬性變數來⽤就可以了
        
    '''
u = User("王明", 1994, 1024663304, "[email protected]")
print(u.age)
u.qq = 10010
u.age = 18

私有屬性

class Person:
    def __init__(self, name): # 構造, 建立物件的時候自動呼叫
        self.__name = name # 私有的
        print("這裡是構造方法")

    def init(self):
        print("例項方法")

    def __chi(self): # 私有的
        print("我要吃. 瘋狂的吃")

    def he(self):
        self.__chi() # 內部呼叫
        print("我是喝", self.__name)

p = Person("孫藝珍")
p.he()
# # p.__init__() # 很蠢
# p.init()
# print(p.__name)

 練習

定義一個類,其中有計算周長和麵積的方法(圓的半徑通過引數傳遞到構造方法)
import math

class Circle:
    """
        對圓的封裝
    """

    def __init__(self, r):
        '''

        :param r: 半徑
        '''
        self.r = r

    def c(self):
        '''

        :return:  周長
        '''
        return 2 * math.pi * self.r

    def s(self):
        '''

        :return: 面積
        '''
        return math.pi * self.r * self.r
輸入使用者資訊
class UserInfo:
    """
    封裝三個資訊: name,pwd, email
    """
    def __init__(self, name, pwd, email):
        self.name = name
        self.pwd = pwd
        self.email = email
lst = []
while len(lst) < 3:
    uname = input("請輸入你的使用者名稱:")
    pwd = input("請輸入你的密碼:")
    email = input("請輸入你的郵箱:")
    user = UserInfo(uname, pwd, email)
    lst.append(user)
for u in lst:
    print("你叫%s, 郵箱是%s" % (u.name, u.email))
使用者註冊使用者登入功能
class User: # 使用者
    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd


class Account: # 賬戶
    def __init__(self):
        self.user_list = []  # 使用者列表,資料格式:[User物件,User物件,User物件]

    def login(self):
         print("登入環節")
         ###使用者登入,使用者輸入使用者名稱和密碼並去self,user1ist中檢查使用者是否合法
         username = input("請輸入你的使用者名稱:")
         password = input("請輸入你的密碼:")
         for u in self.user_list:
             if username == u.name and password == u.pwd: # 成功
                 return True
         else:
             return False

    def register(self):
        print("註冊環節")
    ### 使用者註冊,動態建立User物件,並新增到self, user list中
        uname = input("請輸入你的使用者名稱:")
        psw = input("請輸入你的密碼:")
        u = User(uname, psw) # 建立使用者物件
        self.user_list.append(u)


    def run(self):
    ### Q主程式,先進行2次使用者註冊,再進行使用者登入(3次重試機
        self.register()
        self.register()
        # self.user_list = >  [user, user]
        # 三次登入....
        for i in range(3):
            ret = self.login()
            if ret == True:
                print("登入成功")
                break
        else:
            print("太失敗了. 三次都沒成功")

# 當前py檔案是否是啟動檔案
if __name__ == "__main__": # 模組.
    obj = Account()
    obj.run()