面向对象中的特殊的成员修饰符和几个特殊的方法

Posted xiaohei001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象中的特殊的成员修饰符和几个特殊的方法相关的知识,希望对你有一定的参考价值。

面向对象的成员修饰符

#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循环中循环这个返回值
# ======================================================================================================

 

以上是关于面向对象中的特殊的成员修饰符和几个特殊的方法的主要内容,如果未能解决你的问题,请参考以下文章

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

Python_day8_面向对象(多态成员修饰符类中特殊方法对象边缘知识)异常处理之篇

python学习笔记-Day8 上(pickle补充字段面向对象成员成员修饰符特殊方法)

php面向对象-修饰符和抽象类和接口

python面向对象进阶版

python(24)- 面向对象进阶