• 面向对象中类的成员


    
    

    字段:
    静态字段
    普通字段
    PS:静态字段代码加载时候,已经创建

    方法
    所有的方法属于类
    1、普通方法:至少一个self,对象执行
    2、静态方法:任意参数, 类执行(对象执行)
    3、类方法 :至少一个cls, 类执行(对象执行)
    属性
    不论不类的东西
    具有方法的写作形式,具有字段访问形式


    def func(arg):
    print(arg)

    func(1)
    func("alex")
    func([11,22,33])



    C#/Java

    def func(int arg):#指定类型
    print(arg)


    func(123)
    func("alex") #报错



    如何实现?

    class A:
    pass

    class B(A):
    pass

    class C(A):
    pass


    #arg参数,必须是A类型或A的子类型

    def func(A arg):
    print(arg)


    obj = B()
    obj = C()
    obj = A()

    func(obj)


    字段



    class Foo:
    CC = 123 #静态字段

    def __init__(self):
    self.name = 'alex' #普通字段


    def show(self):
    print(self.name)
    字段:
    一般情况下,自己访问自己的字段

    规则:
    普通字段只能用对象访问
    静态字段用类访问(万不得已的时候才可以使用对象访问)


    方法:
    普通方法 至少一个self, 对象执行
    静态方法 任意参数, 类执行 (对象执行)
    类方法 至少一个cls 类执行 (对象执行)



    @staticmethod
    def f1(a1,a2):
    print(a1,a2)

    def f2(cls):
    print(cls) #cls类名,()创建对象

    obj = Province('beijing')

    obj.show


    属性

    class Pager:

    def __init__(self, all_count):
    self.all_count = all_count

    @property #属性的获取
    def all_pager(self):
    a1, a2 = divmod(self.all_count, 10)
    if a2 == 0:
    return a1
    else:
    return a1 +1

    @all_pager.setter
    def all_pager(self, value):
    print(value)
    @all_pager.deleter:
    print('del all_pager')



    p = Pager(101)

    #p.all_count#字段
    print(p.all_count)

    p.all_count = 102

    del p.all_count


    ret = p.all_pager

    print(ret)

    p.all_pager = 111


    del p.all_pager



    属性2



    class Pager:

    def __init__(self, all_count):
    self.all_count = all_count

    def f1(self):
    pass

    def f2(self):
    pass

    def f3(self):
    pass

    foo = property(fget=f1,fset=f2,fdel=f3)

    p = Pager(101)

    result = p.foo
    print(result)

    p.foo = 'alex'

    del p.foo



    成员修饰符


    私有:
    只能类自己本身成员内部访问


    公有
    pass



    class Foo:

    #构造方法
    def __init__(self, name, age)
    self.name = name
    self.age = age

    #析构方法
    def __del__(self):
    pass


    def __call__(self):
    print('call')

    def __str__(self):
    return "%s - %s" %(self.name, self.age)



    obj = Foo()

    obj()#对象() 执行call方法

    #Foo()()


    obj1 = Foo('alex',77)

    ret = str(obj1) #str 方法

    print(ret)

    #__dict__获取对象中封装的数据
    ret = obj1.__dict__

    print(ret)



    def __getitem__(self, item):


    #item.start,item.stop,item.step
    return 123

    def __setitem__(self, key, value):
    print('setitem')

    def __delitem__(self, key):
    print('del item')

    dic = {"k1":123} #dic = dict(k1=123)

    dic['k1'] #dic()

    dic['k1'] = 123

    del dic['k1']




    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Alex Li
    class Foo:

    # 构造方法
    def __init__(self, name,age):
    self.name = name
    self.age = age

    # 析构方法
    def __del__(self):
    pass

    def __call__(self):
    print('call')

    def __str__(self):
    return "%s - %d" %(self.name, self.age)

    def __add__(self, other):
    temp = "%s - %d" %(self.name,other.age)
    return temp

    def __getitem__(self, item):
    # print(type(item),item)
    # item.start item.stop item.step
    print(type(item))
    return 123

    def __setitem__(self, key, value):
    # key.start key.stop key.step
    print(type(key),type(value))

    def __delitem__(self, key):
    # key.start key.stop key.step
    print(type(key))


    obj = Foo('alex', 73)
    # obj() # call
    # 语法对应关系
    # ret1 = obj['ad']
    ret2 = obj[1:4:2]
    obj[1:4] = [11,22,33,44,66]
    del obj[1:4]
    # print(ret)
    # obj['k1'] = 111
    # del obj['k1']

    # dic = {'k1': 123} # dic = dict(k1=123)
    # dic['k1'] # dic()
    # dic['k1'] = 123
    # del dic['k1']



    obj = Foo()
    obj() # 对象() 执行call
    # Foo()()

    obj1 = Foo('alex', 73)
    obj2 = Foo('eric', 84)
    # 获取对象中封装的数据
    ret = obj1.__dict__
    print(ret)

    # print(Foo.__dict__)

    # print(obj1)
    # print(obj2)

    # ret = str(obj1)
    # print(ret)

    # ret = obj1 + obj2
    # print(ret)
    # __dict__



    class C1:
    def f1(self):
    print('c1,f1')
    return 123


    class C2(C1):
    def f1(self):
    # 主动执行父类f1方法
    ret = super(C2, self).f1()

    print('c2.f1')

    return ret

    # C1.f1(self)


    obj = C2()

    obj.f1()




    #有序字典

    class MyDict(dict):

    def __init__(self):
    self.li = []
    super(MyDict, self).__init__()

    def __setattr__(self, key, value):
    self.li.append(key)
    super(MyDict, self).__setattr__()

    def __str__(self):
    temp_list = []
    for key in self.li:
    value = self.get(key)
    temp_list.append("'%s':%s'" %(key,value,))
    temp_str = "{" + ",".join(temp_list) + "}"
    return temp_str

    obj = MyDict()
    obj['k1'] = 123
    obj['k2'] = 456

    print(obj)

    """


    class Foo:

    instance = None

    def __init__(self,name):
    self.name = name

    @classmethod
    def get_instance(cls):

    #cls类名
    if cls.instance:
    return cls.instance
    else:
    obj = cls('alex')
    cls.instance = obj
    return obj


    obj1 = Foo.get_instance()
    print(obj1)
    obj2 = Foo.get_instance()
    print(obj2)
  • 相关阅读:
    Android 获取Bitmap方式
    o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.7] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
    idea 全部报错找不到包
    idea Plugin "Maven Integration Extension" was not loaded: required plugin "Maven Integration" is disabled
    okhttp 通过网关请求服务端返回数据
    mongo 过滤查询条件后分组、排序
    OKhttp3
    linux安装consul集群
    spring cloud 订单调用用户
    WebSphere概要文件管理工具
  • 原文地址:https://www.cnblogs.com/zcx-python/p/5635113.html
Copyright © 2020-2023  润新知