python面向对象小例子


用一个银行存款取款的例子来回忆一下面向对象最基础的部分


class Account:
    all_count={}   #类属性
    def __init__(self, name, number, balance):  # 初始化账户的'实例方法',见名知意
        self.name = name
        self.number = number  # 实例的变量属性
        self.balance = balance
        self.all_count[self.number] = self   #

    # def __del__(self):  #当实例对象被销毁的时候,当变量的指向为0的时候  自动触发
    #     print(self.name,'被销毁了')


    def deposit(self, amount):  # 存款
        if amount <= 0:
            print('存款金额不得为负')
        else:
            self.balance += amount

    def withdraw(self, amount):  # 取款
        if amount > self.balance:
            print('余额不足')
        else:
            self.balance -= amount

    def describe(self):  # 查询账户详情
        return "Account(姓名:{name},账户:{number},余额:{balance})".format(name=self.name,
                                                           number=self.number,
                                                           balance=self.balance)
    def close(self):
        self.all_count.pop(self.number)


a=Account('xps','6217',10000)
v = getattr(a,'nme','000')
# b = a
# del a
print(v)
# a.deposit(5000)
# a.withdraw(2500)
# print(a.describe())
#
# print(a.__dict__)
# print(__name__)

############################################ 笔记 #######################################3
#__init__()    在实例化之后自动被调用,用来进行初始化
#__del__()      删除变量的指向,不是直接去删除这个对象  例如:a=[1,2,3]  b=a   del a   a变量没了,但是b还存在
                #程序执行完之后变量的内存自动释放.自动触发  __del__

#__str__()     #str 会自动触发    对用户友好   后面可以直接 print(a) 来输出str的值,如果没有定义a,则输出repr的值
#__repr__()    repr会自动触发     对开发者友好     在控制台shell 直接 a  输出repr的值  ,如果repr没有定义,则不会找str

#getattr()      getattr(i,'name','没有') 相当于转换成对象的访问 obj.name  获取,,和字典里面的get()方法类似,找不到返回'没有'   'name'这里是一个字符串
#hasattr()      hasattr(i,'xxx')  返回布尔值 (还可以避免因为属性没有而产生报错)   'xxx'也是字符串       hasattr 还可以避免,因为属性没有,而导致的报错


#setattr()      setattr(i,'name','vvv'')  自动转换成i.name = 'vvv'         'name'这里是一个字符串
#delattr()      delattr(i,'name')     删除                                   'name'这里是一个字符串    转化成del i.name

#__class__      可以得到一个类实例所属的类对象,print(a.__class__)   <class '__main__.Account'>   不是类名
#__doc__       注释文档写了之后,可以help出来   如:print(help(Account))
                #  注释存储在了__doc__里   如: print(Account.__doc__)可以打印其文档注释

#__dict__      一个存储了对象属性的字典 把该变量空间的打印出来
                #  例:print(a.__dict__)  >>{'balance': 12500, 'name': 'xps', 'number': '6217'}
                #类也可以   print(Account.__dict__)
#__name__

def dance():
    pass
print(dance.__name__)     #可以查看该函数的名字

class C:
    pass
print(C.__name__)         #可以查看该类的名字

#类名  是一个字符串

#print 输出的是你给他的东西得  __str__

#shell 里面  输出的是  你给他的东西的 __repr__

#self   是实例本身
# print 输出的str 但是如果输出一个数据结构(集合元组字典列表)的数据,里面的数据,会以repr展示


########################################################################################
if __name__ == '__main__':
    pass



#print(str(__name__))       __name__

#import 的时候,会把那个文件执行一遍
###如果作为一个模块被导入的话,就不会调用__name__以下的东西
#  print(__name__)     结果为  __main__

#######################################################闭包###########################33
class A:
    def __del__(self):
        print('被销毁0')

def outer():   #
    a=A()  #a 是在函数调用时候实例化的
    def inner():    #inner 也是在outer里面定义的,在outer结束的时候inner也被销毁
        print(a)
    return  inner

x = outer()     #用一个变量去接受,就不会打印出来,inner获得一个临时指向
del x #销毁函数inner




#1.构造局部的全局变量
#2.在没有类的情况下,封装变量


input()



######私有化,保护作用,类的外面访问不到
_eye=2  # protect  隐藏  但是可print(dog._eye)访问.修改

__leg=4    # 彻底保护.  万一访问的话,可以以下在外面访问(先定义一个方法):
def getLeg(self):     #获取私有属性
    return self.__leg
leg = dog.getLeg()
print(leg)     #可通过此方法在类外面查看

###如果是修改私有属性的话:
def setLeg(self,leg):    #设置
    self.__leg = leg
dog.setLeg(55)    #修改私有属性
print(dog.getLeg())   #用get 方法来查看一下



文章作者: 剑胆琴心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 剑胆琴心 !
评论
 上一篇
python面向对象-继承小小例子 python面向对象-继承小小例子
用之前学习笔记的小例子来复习一下 ############################继承 #父类里面有的,子类里面再写一次. 叫做重写 ,只会用子类的了,父类的就屏蔽了 #继承是通过查找来找的, 不是变量空间的复制, 还是独立的变
2020-02-19
下一篇 
wpscan更新超时报错 wpscan更新超时报错
https://blog.csdn.net/zhang644720213/article/details/92849717 参考自:https://blog.csdn.net/zhang644720213/article/details
2020-02-17
  目录