@classmethod 有的时候在类中会有一种情况,就是这个方法并不需要使用每一个对象属性 因此 这个方法中的self参数一个完全无用的参数,使用classmethod class A: __count = 0 # 隐藏类count属性 def __init__(self, name): self.name = name self.__add_count() # 每一次实例化的时候掉 # 用私有方法来对__count 进行累加 @classmethod def __add_count(cls)…
回答背景知识 这些都是装饰器(decorator).装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类. @标记是语法糖(syntactic sugar),可以让你以简单易读得方式装饰目标对象. @my_decorator def my_func(stuff): do_things Is equivalent to def my_func(stuff): do_things my_func = my_decorator(my_func) 你…
组合 什么有什么的关系 一个类的对象作为另一个类的对象继承 子类可以使用父类中的名字(静态属性 方法)抽象类和接口类 只能不继承,不能被实例化 子类必须实现父类中的同名方法———规范代码 metaclass=ABCMeta @abstractmethod python 支持多继承,对于python 来说,抽象类和接口类没有区别 接口类是python 特有的,因为Pythonz直接用类就可以实现接口的效果 python没有'接口'这种数据类型,java中有 继承多态封装propertyclassm…
封装 # class Room:# def __init__(self,name,length,width):# self.__name = name# self.__length = length# self.__width = width# def get_name(self):#C++的编码习惯,一个get和一个set# return self.__name# def set_name(self,newName):# if type(newName) is str and newName.…
官方解释 @classmethod 一个类方法把类自己作为第一个实参, 就像一个实例方法把实例自己作为第一个实参. 语法格式: class C: @classmethod def f(cls, arg1, arg2, ...): ... 官方文档链接 @staticmethod 静态方法不会接收隐式的第一个参数. 语法格式: class C: @staticmethod def f(arg1, arg2, ...): ... 官方文档链接 特性 相同点 可不实例化类直接调用 import tim…
接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不同: 静态字段(静态变量) 公有静态字段:类可以访问:类内部可以访问:派生类中可以访问 私有静态字段:仅类内部可以访问: class C: name = "公有静态字段" def func(self): print C.name class D(C): def show(self): pr…
一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内容都隐藏起来: 2. 把属性都隐藏,提供公共方法对其访问. 私有变量和私有方法 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A:…
class MyClass(object): def __init__(self): self._some_property = "properties are nice" self._some_other_property = "VERY nice" def normal_method(*args,**kwargs): print "calling normal_method({0},{1})".format(args,kwargs) @cla…
绑定方法和非绑定方法: 普通def定义的都是绑定给对象的方法,对象调用时会自动传入对象本事,而类调用时需手动传入对象. 加上@classmethod装饰器就是绑定给类的方法,会自动传类本身 加上@staticmethod是非绑定方法,不会自动传类参数或对象参数   参数有self 能访问类方法 能访问实例方法 说明 staticmethod 否 否 否 与类.实例均无关 classmethod 是 是 否 只能访问类变量 property 是 是 是 把方法变为属性, 调用时不能加括号…
计算所居住房子的面积 普通写法 class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.lenth=length self.heigh=heigh def cal_area(self): print('%s 住的 %s 总面积为 %s' %(self.owner,self.name,self.heigh*self.widt…
一.静态属性@property将方法标记成数据属性:可以访问实例和类的属性 @classmethod标记成类的方法,不需要实例化,可以类直接调用的方法.可以访问类的属性方法,不能访问实例的 class Room: tag=1 def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh @p…
https://blog.csdn.net/weixin_42681866/article/details/83376484 https://blog.csdn.net/weixin_43265804/article/details/82863984 https://segmentfault.com/a/1190000017078783?utm_source=tag-newest https://www.jb51.net/article/161316.htm https://www.jiansh…
classmethod-把classmethod装饰的方法变成为类中的方法 作用: 把classmethod装饰的方法变成为类中的方法,这个方法直接可以被类调用,不需要依托任何对象 应用场景: 当这个方法只涉及静态属性的时候,就应该使用classmethod装饰这个方法 #类里面的操作行为 class Goods: __discount = 0.5 def __init__(self,name, price): self.name = name self.__price = price #折扣前…
python中的定义: class MyClass: ... @classmethod  # classmethod的修饰符 def class_method(cls, arg1, arg2, ...): ... @staticmethod  # staticmethod的修饰符 def static_method(arg1, arg2, ...): ... @classmethod : 类方法 @staticmethod : 静态方法 类方法和静态方法的调用一样,都是通过类就可以直接调用. 区…
Python 解释器内置了一些函数,它们总是可用的.这里将它们按字母表顺序列出.     Built-in Functions     abs() divmod() input() open() staticmethod() all() enumerate() int() ord() str() any() eval() isinstance() pow() sum() basestring() execfile() issubclass() print() super() bin() file…
静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作.可以理解为,静态方法是个独立的.单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护.   譬如,我想定义一个关于时间操作的类,其中有一个获取当前时间的函数.使用了静态方法,然而方法体中并没使用(也不能使用)类或实例的属性(或方法).若要获得当前时间的字符串时,并不一定需要实例化对象,此时对于静态方法而言,所在类更像是一种名称空间…
来源:http://blog.csdn.net/carolzhang8406/article/details/6856817 其他参考: http://blog.csdn.net/lovingprince/article/details/6595466 http://blog.csdn.net/handsomekang/article/details/9615239 http://python.jobbole.com/83584/ 比较好的讨论: http://bbs.csdn.net/topi…
上班时间 只贴看到最厉害的答案 回头总结 http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner @classmethod 帮助我理解公司一些代码 最重要的一点.开始我百思不得其解,为什么申明的有些类在没有实力化的情况下,直接进行调用都可以直接运行.后来发现了有类方法这种针对类使用的方法.可以直接调用使用.而且还有一点非常重要 我直接摘抄链接里面的话. cls is…
Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. class A(object): def foo(self, x): print("executing foo(%s,%s)" % (self, x)) print('self:', self) @classmethod def class_foo(cls, x): print("executing class_foo(%s,%s)" % (cl…
python定义类方法的三种方式: 1.常规方式--需要通过self参数隐式的传递当前类对象的实例 2.@classmethod修饰方式--@classmethod修饰的方法class_foo()需要通过cls参数传递当前类对象 3.@staticmethod修饰方式--@staticmethod修饰的方法定义与普通函数是一样 class A(object): def function(self, x): print("executing function(%s,%s)" % (sel…
pthon中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. class A(object): def foo(self, x): print("executing foo(%s,%s)" % (self, x)) print('self:', self) @classmethod def class_foo(cls, x): print("executing class_foo(%s,%s)" % (cls…
面向对象中可以用property来修饰我们的函数,必须下面的例子 class Test(object): def __init__(self,name): self.name = name @property def run(self): print(self.name) def talk(self): print(self.name) 使用property修饰有什么效果的,他会把一个类的方法变成了一个类的属性,这样,我们调用的run这个方法的时候,就像直接调用属性一样调用,不需要再像调用方法一…
'''1 绑定方法: 在类内部定义的函数,默认就是给对象来用,而且是绑定给对象用的,称为对象的绑定方法 绑定对象的方法特殊之处: 应该由对象来调用,对象来调用,会自动将对象当作第一个参数传入 绑定到类的方法特殊之处: 应该由类来调用,类来调用,会自动将类当作第一个参数传入 '''import settings class People: def __init__(self,name,age): self.name=name self.age=age def tell(self): print('…
Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. class A(object): def foo(self, x): print("executing foo(%s,%s)" % (self, x)) print('self:', self) @classmethod def class_foo(cls, x): print("executing class_foo(%s,%s)" % (cl…
类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于对象,调用方式实例化对象.字段名 def __init__(self, name, capital, leader): self.Name = name self.Capital = capital self.Leader = leader #动态方法--属于对象 def sports_game(self):…
@property 把方法『变成』了属性,广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性. 最大的作用就是既能检查参数,又可以用类似属性这样简单的方式来访问类的变量! #在使用 @property 之前,让我们先来看一个简单的例子: class Exam(object): def __init__(self, score): self._score = score def get_score(self): return sel…
使用@property 在绑定属性时,如果直接把属性暴露出去,虽然写起来简单,但是没法检查参数,导致可以把成绩随便改: >>> class Student(object): pass >>> s =Student() >>> s.score=999 >>> s.score 999 这显然不符合逻辑,为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_s…
1.属性方法 class Student(object): def __init__(self,name): self.name = name @property #属性方法:把一个方法变成一个静态的属性或者变量. def fly(self): print('{} fly...'.format(self.name)) a = Student('wdc') a.fly #可以用调用属性的方式调用属性方法 2. class Student(object): def __init__(self,nam…
一.迭代器及生成器 #迭代器:迭代的工具 #1 什么是迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值# while True:# print('=====>') # l=['a','b','c']# count=0# while count < len(l):# print(l[count])# count+=1 #2 为什么要有迭代器?#对于序列类型:str,list,tuple,可以依赖索引来迭代取值,# 但是对于dict,set,文件,pyt…
迭代器 迭代器:迭代的工具 .什么是迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值 例: while True: print('====>'') l=['a','b','c'] count= while count<len(l): print(l[count]) count+= .为什么要有迭代器? 对于序列类型:str,list,tuple,可以依赖索引来迭代取值, 但是对于dict,set,文件,python必须为我们提供一种不依赖于索引的迭代取值…