zoukankan      html  css  js  c++  java
  • 面向对象中类的成员

    
    

    字段:
    静态字段
    普通字段
    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)
  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/zcx-python/p/5635113.html
Copyright © 2011-2022 走看看