dir()-----将属性打印: ['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'language', 'name', 'self_introduction'] programer.__dict__ ----- 是将这个对象在构造函数里面赋予值的属性打印出来: {'name': 'Albert', '_age': 21, '_Programer__weight': 50, 'language': 'Chinese'} type(programer)是个啥东西:判断paogranmer的种类: <class '__main__.BcakendProgramer'> isinstance(programer,Programer)是个啥东西:-----判断后者是不是前者的父类: True
在一个类A中普通的方法定义为def func(),在调用时通过对象a.func()
类方法通过@classmethod定义,只能访问类的属性,通过类来调用A.func()
如果希望像普通属性一样调用方法通过@property,调用时为a.func,不用加括号
代码里面是python2,应该是2版本的。
自己定义生成一个,想要啥属性都可以?
估计是,反正我这边也是这样的,多传参数报错
Python3.3以上版本调用__new__()的时候,不要带参数。调用的时候改成__new__(cls)就不报错了。同时重写__init__和__new__时避免传递额外的参数,若只重写其中一个则可以传递额外参数。
运行之后错误截图贴上来
真香警告
这是为类创建类的实例时,self参数是一个指向实例本身的引用,用于访问类中的属性和方法
python3要加括号
pycharm
干不了啥
方法上方标注@classmethod、@property或无标注,分别代表classmethod、property和一般的方法。
__name__是模块名,当前模块默认值是__main__, 若被import到其他脚本中,if下面的语句不会执行是不会被执行的,是为了上面代码的复用
class Programer(object):
hobby='Play Computer'
def __init__(self,name,age,weight):#init名字写错了
self.name=name
self._age=age
self.__weight=weight
def get_weight(self):
return self.__weight#这里的名字也漏了个下划线
if __name__=='__main__':
programer=Programer('Albert',25,80)
print(dir(programer))
print(programer.__dict__)
print(programer.get_weight())
print(programer._Programer__weight)
class OldStyle:
#这里__init__是两下划线哦
def __init__(self, name, description):
self.name = name
self.description = description
class NewStyle(object):
#这里也__init__是两下划线哦
def __init__(self, name, description):
self.name = name
self.description = description
# 这里是 '__main__' 是两下划线哦 因为:__name__ == '_main_' 是不相等,所以这个if下的代码就没在执行
if __name__ == '__main__':
old = OldStyle('old', 'OldStyle')
print(old)
print(type(old))
print(dir(old))
print('-------------------------------------')
new = NewStyle('new', 'NewStyle')
print(type(new))
print(dir(new))
cls表示类本身,self表示一个具体实例本身。所以cls主要用在类方法定义,而self则是实例方法定义中。而get_hobby是classmethod,所以第一个参数传入了cls。
Pytho3.0之后的版本中
在Python3.0中变成真除法(无论任何类型都会保持小数部分,即使整除也会表示为浮点数形式)。
>>> 3/2
1.5
>>> 3/2.0
1.5
>>> 4/2
2.0
>>> 4/2.0
2.0
想要实现整除,需要使用‘//’
>>> 1/2
0
---------------------
作者:jasonLee_lijiaqi
来源:CSDN
原文:https://blog.csdn.net/jasonLee_lijiaqi/article/details/79300077
版权声明:本文为博主原创文章,转载请附上博文链接! 百度来的
详细解释可参照链接:https://www.cnblogs.com/alan-babyblog/p/5147770.html
def __new__(cls,*args,**kwargs):
print ("call __new__ method")
print (args)
return super(Programer,cls).__new__(cls,*args,**kwargs)
去掉括号里的*args,**kwargs 再运行就好了
35行函数不是类中的方法,是全局函数。全局函数首列编写的。
python3里都继承自object类
__name__是一个变量。前后加了双下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。。不重名的了
肯定呀,print后面都没有小括号,必须是2.7
是的,在类中定义的magic method可看作是对父类(object)中相应magic method方法的重载,这也是面向对象多态性的体现
应该是,不是3,这个是确定的
29行,去掉最后的“()”
把这句改为