物件導向補充練習

2022-07-01 10:39:08 字數 1958 閱讀 7252

#練習一

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...