#練習一
class base:
x = 1
obj = base()
print(obj.x)
obj.y = 123
print(obj.y)
obj.x = 123
print(obj.x)
print(base.x)
'''輸出結果
1123
1231
'''#練習二
class foo(object):
n1 = '武沛齊'
def __init__(self,name):
self.n2 = name
obj = foo('太白')
print(obj.n1)
print(obj.n2)
print(foo.n1)
print(foo.n2)??
'''輸出結果為:
武沛齊太白
武沛齊type object 'foo' has no attribute 'n2'
報錯原因:在沒有例項化物件時,__init__並不會自動執行,所以會報錯
'''#在物件中定義的數值在例項化時可以重新定義數值,即再次呼叫的時候數值是更改後的數值
class user:
def __init__(self,name,pwd): # 把使用者資訊全都封裝到此處
self.name = name
self.pwd = pwd
class account:
def __init__(self):
self.user_list = #那麼會不會有乙個疑問,
def login(self):
username = input("請輸入使用者名稱:")
userpwd = input("請輸入密碼")
flag = false #falg的用法確實要謹記
for i in self.user_list:#在同乙個類中,self指的是obj,所以之間的相互呼叫是被允許的。
if i.name == username and i.pwd == userpwd:
flag = true
if flag :
print("登入成功")
else:
print("使用者名稱或密碼錯誤")
def register(self):
while true:
user = input("請輸入使用者命:")
pwd = input ("請輸入密輸入n,輸入n停止:")
if pwd == "n":
return #是直接跳出這個函式,返回上一級的函式
user_object = user(user,pwd) #封裝的思想!!!直接user哐叱給幹進去了。那麼是否可以用方法呢,主動執行,是否可以可以考慮將其封裝到乙個方法中呢?
#答上述問題:所謂的封裝資料必然是用到的類而不是所謂的方法,所以user的存在是必要且必須的。
def run(self):
#主程式
while true:
print("1.註冊;2.登入")
choice = input("請選擇:")
if choice == "1":
self.register()
elif choice =="2":
self.login()
else:
print("選擇錯誤")
if __name__ == "__main__":
obj = account()
obj.run()
'''總結與思考
1.對於多個同一屬性的函式時,一定要學會將其封裝到乙個類中
2.對於資料的封裝一定是再起乙個新的類,而不是乙個新的方法
3.主程式的思維也要學會使用
'''
物件導向的補充
封裝 封裝是把物件中的成員屬性和成員方法,加上訪問修飾符,使其盡可能隱藏物件的內部細節,已達到對成員的訪問控制 是訪問的控制,而不是拒絕訪問 自己能用,別人不能用 三種訪問修飾符 public 公認的,預設 private 私有的 用於封裝,在外部不可訪問 protected 受保護的 只要在宣告成...
C 物件導向補充
類作為構造函式引數時呼叫 拷貝建構函式 class clock 有參 clock int a,string name clock int b,string name a b name name 拷貝構造 clock const clock clock 析構 clock static void sho...
物件導向練習
定義boat和car兩個類,兩者都有私有成員weight屬性,定義兩者的乙個友員函式totalweight 計算兩個類的物件的重量和。請根據給定的main函式和totalweight 函式的定義,完善boat和car兩個類。友元函式的使用 include using namespace std cl...