python類的成員
阿新 • • 發佈:2018-11-07
一.例項變數:簡單的來說就是給物件賦值
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()