python面向对象(高级)1+1=2

面向对象

  class Foo:
  #静态字段,属于类
  country=‘中国‘

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

  #普通方法
  def show(self):
  print(self.name)

  #静态方法
  @staticmethod
  def sta(a1,a2):
  print(a1,a2)

  #类方法
  @classmethod
  def classmd(cls):
  #cls是类名
  print(cls)
  print(‘classmethod‘)

  #属性/特性
  @property            def f1(self):      def f2(self):          def f2(self):
  def per(self,a):      或      return 1         print(a)            del self.name
  print(a)                         return 1           删除对象的name字段
  return 1             per=property(fget=f1,fset=f2,fdel=f3)

  Foo.country
  obj=Foo(‘anner‘)
  obj.name
  Foo.show(obj)
  obj.show()
  Foo.sta(1,2)#静态方法,通过类名就可以调用
  Foo.classmd()#系统自动将类名传入,赋给cls参数
  a=obj.per=123#属性/特性,调动时跟调用字段相同,不用加括号。为其赋值传进参数
  del obj.per#属性/特性,调用f3,删除对象的name字段
  print(a)

类成员:
  #字段
  ——普通字段,保存在对象中,只能通过对象访问
  ——静态字段,保存在类中,执行可以通过对象访问,也可以通过类访问

  #方法
  ——普通方法,保存在类中,由对象调用self==>对象
  ——静态方法,保存在类中,加装饰器,由类可以直接调用,self就不是必须的了
  ——类方法,保存在类中,加装饰器,由类可以直接调用,cla==>当前类
  #属性/特性
  ——普通方法加装饰器,但调动时跟调用字段相同,不用加括号。
########应用场景:
  如果对象中需要保存一些值,执行某功能时,需要使用对象中的值==>普通方法
  不需要任何对象中的值,静态方法
  在列表,集合,字典调用中索引值可能通过方法调用得出,所以写法会比较乱;所以利用特性装饰方法后可以省去方法调用时的括号,便于阅读

原文地址:https://www.cnblogs.com/TianLiang-2000/p/11594000.html

时间: 2024-11-09 03:40:28

python面向对象(高级)1+1=2的相关文章

Python之路【第十二篇】:Python面向对象高级

一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. 2 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 导入其他模块,利用反

Python面向对象高级编程:@property--把方法变为属性

为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: 1 >>> class Student(object): 2 def get_score(self): 3 return self.__score 4 def set_score(self,value): 5 if not isinstance(value,int): 6 raise ValueError('sec

python面向对象高级编程

python中属性和方法的动态绑定  class Student(object):     pass   # 实例化一个对象     s = Student() # 给这个对象绑定一个属性name s.name = 'John'   print(s.name) John   # 定义一个方法 def set_age(self, age):     self.age = age   # 导入模块     from types import MethodType   #给s这个对象绑定一个set_a

python\面向对象高级

一.__slots__ 1.__slots__的概念:是一个变量,变量值可以是列表,元组,或者可迭代对象,也可以是一个字符串. 2.使用点来访问属性本质就是在访问类或者对象的__dict__属性字典(类的字典是共享的,而每个实例是独立的) 3.为什么要用:节省内存,不会产生新的名称空间. 定义__slots__后,__slots__就会为实例使用一种更加紧凑的内部表示.实例通过一个很小的固定大小的数组来构建,而不是每个实例定义一个字典:在__slots__中列出的属性名在内部被映射到这个数组的指

Python 面向对象高级编程——使用@property

1.1   使用@property 输入成绩score时,需对这个参数进行检查. >>> class Student(object): ...    def get_score(self): ...        return self.__score ...    def set_score(self, value): ...        if not isinstance(value, int): ...             raise ValueError('score mu

Python 面向对象高级编程——定制类

1.1   定制类 1.1.1   __str__ >>> class Student(object): ...    def __init__(self, name): ...        self.name = name ... >>> s = Student('daidai') >>> s.name 'daidai' >>> Student('daidai').name 'daidai' >>> print(

Python 面向对象高级编程——使用枚举和元类

1.1   使用枚举 基于Enum类实现的枚举 >>> fromenum import Enum >>> Month = Enum('Month', ('Jan','Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) >>> for name, member inMonth.__members__.items(): ...    print(name,

Python面向对象高级编程[email protected]

使用@property 在绑定属性时,如果直接把属性暴露出去,虽然写起来简单,但是没法检查参数,导致可以把成绩随便改: >>> class Student(object): pass >>> s =Student() >>> s.score=999 >>> s.score 999 这显然不符合逻辑,为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_s

Python面向对象高级编程-_slots_

使用_slots_ 正常情况下,当定义一个class,创建一个class的实例后,可以给实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' >>> print s.name Michael 还可以尝试给实例绑定一个方法: >>>

python面向对象高级:反射、魔法方法、元类

自省/反射什么是反射?自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的.并且在python里,反射可以使得程序运行时对象拥有增删改查它本身属性或行为的一种能力如果Python不支持某种形式的自省功能,dir和type内建函数,将很难正常工作.还有那些特殊属性,像__dict__,__name__及__doc__反射的使用场景? 即插即用,即可以事先定义好接口,接口只有在被完成后才会真正执行 比如:如果和别人共同合作开发项目,但是需要用到对方的类的方法,对方还没完成 f1=FtpC