面向对象的成员修饰符
#Auther Bob #--*--conding:utf-8 --*-- # 成员修饰符 # 共有成员 # 私有成员 # 1、私有字段 # 私有的普通字段 # 私有的静态字段 # 2、私有方法 # 私有的方法 # 默认情况下,类的字段和方法都是共有的,通过对象和类就直接可以访问,但是如果我们在字段或者方法名字的前面加2个下划线,那么我们就不能在外部访问这些字段和方法,这些 # 方法和字段只能内部方法
class person(object): name = "diandian" __age = 3 def __init__(self,address,phone): self.address = address self.__phone = phone def func_print1(self): print(self.name,self.__age) print(self.address,self.__phone) def __func_print2(self): print(self.name,self.__age) print(self.address,self.__phone) return self.__phone def func_print2(self): return self.__func_print2() p1 = person("shenzhen","123456789") print(p1.name) # 这里的name是共有静态字段,在外部可以直接访问 # print(p1.__age) # 这里的__age是私有的静态字段,在外部不可以直接访问 print(p1.address) # 这里address是共有的普通字段,在外部可以直接访问 # print(p1.__phone) # 这里的__phone是私有的普通字段,在外部不可以直接访问 p1.func_print1() # func_print1是共有的方法,在外部可以直接访问 # p1.__func_print2() # __func_print2是私有的方法,在外部不可以直接访问 ret = p1.func_print2() print(ret) # 私有方法可以在内部通过共有的方法调用直接,可以间接的达到在外部执行内部私有的方法 # 子类也可以执行父类的私有方法 # 子类不可以使用父类的私有的字段 class cuihongyan(person): def __init__(self,address,phone,emill): super(cuihongyan,self).__init__(address,phone) self.emill = emill def test_cuihongyan(self): # self.__func_print2 print("---------------") print(self.emill) super(cuihongyan, self).func_print1() # super(cuihongyan,self).__func_print2() # print(self.__phone) # print(self.__age) # __phone和__age都属于是父类的私有的普通字段和静态字段,这里在子类中都不可以访问
面向对象中的几个特殊的方法
#Auther Bob #--*--conding:utf-8 --*-- class test(object): def __init__(self,name): self.name = name def __call__(self, *args, **kwargs): print("xxxx") def __int__(self): return 345 def __str__(self): return "aaaaaaa" t = test("cui") # ====================================================================================================== t() # 对象+括号就会执行__call__方法 # ====================================================================================================== print(int(t)) # int(对象)就会自动执行对象中的__int__方法,然后把好这个方法的返回值接收到 # ====================================================================================================== print(str(t)) # str(对象)就会自动执行对象中的__str__方法,然后把这个方法的返回值接收到 print(t) # print(对象)这个方法也是默认会执行对象中的str方法,然后接受str方法的返回值接收到,效果等同于print(str(对象)) # ====================================================================================================== class test1(object): def __init__(self,age): self.age = age def __add__(self, other): return self.age + other.age t1 = test1(20) t2 = test1(30) print(t1 + t2) # 我这里定义了一个__add__这个函数,那么如果object1+object2相加,那么就会调用object1对象的__add__方法,然后把第二个对象当做参数传递给__add__这个 # 函数,用other来接受 # 同样加减乘除的效果都和加是一样的 # ====================================================================================================== class test2(object): def __init__(self,age): self.age = age def __add__(self, other): return self.age + other.age def __del__(self): print("对象被销毁了") t1 = test2(20) # 对象的__del__方法,就是对象被销毁的时候自动执行的,由python自动执行的. # ====================================================================================================== class test3(object): name = "alex" def __init__(self,age): self.age = age def __add__(self, other): return self.age + other.age t1 = test3(20) print(t1.__dict__) print(test3.__dict__) # __dict__打印对象中的的字段,而只打印普通字段,而不打印静态字段 #__dict__打印类中的成员 # ====================================================================================================== class test3(object): name = "alex" def __init__(self, age): self.age = age def __add__(self, other): return self.age + other.age def __getitem__(self, item): return item * 10 t = test3(20) print(t[20]) # 使用对象[item]的方式,就会自动调用类的__getitem__方法 # ====================================================================================================== class test3(object): name = "alex" def __init__(self, age): self.age = age def __add__(self, other): return self.age + other.age def __getitem__(self, item): return item * 10 def __setitem__(self, key, value): print(key,value) t = test3(30) t["ke"] = "v1" # 使用 对象["k"] = "v"就会自动执行对象中的__setitem__方法 # ====================================================================================================== class test3(object): name = "alex" def __init__(self, age): self.age = age def __add__(self, other): return self.age + other.age def __getitem__(self, item): return item * 10 def __setitem__(self, key, value): print(key,value) def __delitem__(self, key): print(key) t = test3(20) del t[39] # del 对象[值] 就会自动调用类的__delitem方法 # ====================================================================================================== class test3(object): name = "alex" def __init__(self, age): self.age = age def __add__(self, other): return self.age + other.age def __getitem__(self, item): return item * 10 def __setitem__(self, key, value): print(key,value) def __delitem__(self, key): print(key) def __iter__(self): return iter(["a","b","c","d"]) t = test3("30") for i in t: print(i) # 如果对象中有__iter__方法,那么说明这个对象是一个可迭代的对象 # 如果对对象执行for循环进行可迭代对象 # 1、执行类的__iter__方法,然后获取他的返回值,这里要用iter来返回 # 2、然后在for循环中循环这个返回值 # ======================================================================================================
原文地址:https://www.cnblogs.com/xiaohei001/p/9787890.html
时间: 2024-10-14 07:01:48