面向对象中类的成员


   字段:      静态字段      普通字段      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.fooprint(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 Liclass 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‘] = 123obj[‘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)
时间: 2024-10-15 14:23:52

面向对象中类的成员的相关文章

面向对象中类和类的关系

在面向对象方法中,我们在确定了类及类的属性和方法后.不可避免的要研究类和类之间的关系,正是这些关系将整个事情串联起来.使彼此之间有了联系,就像现实生活中,人与人交往中存在着不同的关系. 了解这些关系,对于我们开发系统百利而无一害,能够让我们轻松.高效的工作,相同像我们在日常生活中处理好人与人之间的关系.会给我们带来巨大的优点.那么我们就来认识一下.面向对象中类与类之间有那些关系. 类和类之间的关系大概能够分为一下几种类型:泛化关系(Generalization).实现关系(realization

JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对

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

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

c++中类的成员函数调用剖析

此用一个小示例来说明c++中成员函数是怎么调用的 #include <iostream> using namespace std; class Test{ public: void funcMember(){ cout << "I'm member function" << endl; int *ptr = reinterpret_cast<int*>(const_cast<Test*>(this)); //int *ptr

Java面向对象——类的成员

Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean类型成员变量的默认值是false. Int类型成员变量的默认值是0. Double类型成员变量的默认值是0.0. String类型成员变量的默认值是null. Char类型成员变量的默认值是\u0000. 类变量 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外

Python 学习笔记 - 面向对象(类成员)

上一篇学习了Python面向对象的3大特性,封装,继承和多态,这一篇继续学习类成员,包括字段,方法,属性以及他们的修饰符. 1.字段 字段分为静态字段和普通字段.静态字段属于类,而普通字段属于对象,因此静态字段在内存中只保存一份,而普通字段在每个对象中都保存了一份.定义的时候静态字段定义在类的范围里面,而普通字段定义在方法里面. 例如: >>> class Foo:     # 字段(静态字段)     CC = 123     def __init__(self):         #

Python面向对象之类的成员

Python面向对象的编程过程中,我们为类实例化了对象,并通过对象指针来访问类中对应的资源,那么这些资源大体分为三大部分,分别是字段.方法和属性,我们将这三大块统称为类的成员. 一.字段 字段可以分为静态字段.动态字段,下面通过代码展示类中的两种字段 class MyClass:     # 静态字段,属于类,多个对象共用一个静态字段     leader = "abuve"       def __init__(self):         # 动态字段,属于对象,也可以叫普通的字段

PHP中类中成员及常量

类中成员概述 面向对象编程,是需要通过"对象"去做什么事情(以完成某种任务): 而: 对象总是来源于类: 所以: 面向对象的编程,一切都是从定义类开始: 类中成员分为3大类: 属性: 方法: 常量: 形式上,大致如下: class  类名 { 常量定义1: 常量定义2: ....... 属性定义1: 属性定义2: ........ 方法定义1: 方法定义2: ....... } 说明: 以上各项,没有顺序问题:习惯上,其实常量放前面,然后是属性,然后是方法: 详细一点,就又分为: 属性

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial diameter),极直径(polar diameter)''' def __init__(self,name,eqDiameter,poDiameter): self.name=name self.eqDiameter=eqDiameter #赤道直径 self.poDiameter=poDiamet