1 Star 0 Fork 0

xinban/Python的内置函数

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
类.py 3.70 KB
一键复制 编辑 原始数据 按行查看 历史
xinban 提交于 2021-09-16 09:15 . test1
# 实例和类变量
'''
基本区别是:
实例变量用于每个对象都是唯一的数据。
类变量用于在类的不同实例之间共享的数据。
'''
class Cal(object):
# pi 是类变量
pi = 3.142
def __init__(self, radius):
# self.radius 是实例变量
self.radius = radius
def area(self):
return self.pi * (self.radius ** 2)
a = Cal(32)
print(a.area()) # 3217.408
print(a.pi) # 3.142
a.pi = 43
print(a.pi) # 43
b = Cal(44)
print(b.area()) # 6082.912
print(b.pi) # 3.142
'''
使用不可变类变量时没有太多问题。因为一切正常,
初学者不会尝试更多地了解这个主题,这是主要原因!
如果你还认为使用不正确,实例和类变量不会导致任何问题
'''
class SuperClass(object):
superpowers = []
def __init__(self, name):
self.name = name
def add_superpower(self, power):
self.superpowers.append(power)
foo = SuperClass('foo')
bar = SuperClass('bar')
print(foo.name) # foo
print(bar.name) # bar
foo.add_superpower('fly')
bar.add_superpower('bar')
print(bar.superpowers) # 类变量会改变么 ['fly', 'bar']
print(foo.superpowers) # ['fly', 'bar']
'''
这是可变类变量错误使用的美妙之处。
为了使你的代码安全抵御这种意外攻击,请确保你不使用可变类变量。
只有当你知道自己在做什么时,才可以使用它们。
'''
# 新样式的类
'''
新旧样式类的区别
1.旧的基类不会从任何东西继承。
2.新样式基类继承自 object。
'''
class OldClass():
def __init__(self):
print('I am an old class')
# return 'I am an old class' # __init__()初始化中return只能返回none
return
class NewClass(object):
def __init__(self):
print('I am a jazzy new class')
return
old = OldClass() # I am an old class
print(old) # <__main__.OldClass object at 0x000001FDA40B5400>
# Output: I am an old class
new = NewClass() # I am a jazzy new class
print(new) # <__main__.NewClass object at 0x000001FDA40B5438>
'''
从 object 继承允许新样式类利用一些 魔法。 一个主要优点是您可以使用一些有用的优化,
如 __slots__。 您可以使用 super() 和描述符等。 底线?总是尝试使用新式的类。
注意:Python 3 只有新式的类。无论您是否从 object 继承,都无关紧要。但是,建议您仍然从 object 继承。
'''
# 魔术方法
# Python 的类以其神奇的方法而闻名,通常称为 dunder(双下划线)方法。我将讨论其中的一些。
'''
__init__
它是一个类初始化器。 每当创建一个类的实例时,都会调用其 __init__ 方法。 例如:
'''
class GetTest(object):
def __init__(self):
print('Greetings!!')
def another_method(self):
print('I am another method which is not'
' automatically called')
a = GetTest() # Greetings!!
'''
在实例在创建后会立即调用 __init__。 你还可以在初始化期间将参数传递给类。
'''
class GetTest(object):
def __init__(self, name):
print('Greetings!! {0}'.format(name))
def another_method(self):
print('I am another method which is not'
' automatically called')
a = GetTest('yasoob')
# 尝试创建一个不带参数的实例
# b = GetTest() #__init__() missing 1 required positional argument: 'name'
print('-'*10,"分割线","-"*10)
#在类中实现 getitem 允许其实例使用 [](索引器)运算符
class GetTest(object):
def __init__(self):
self.info = {
'name':'Yasoob',
'country':'Pakistan',
'number':12345812
}
def __getitem__(self,i):
print(self.info[i])
return self.info[i]
foo = GetTest()
foo['name'] # Yasoob
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/qitu1024/built-in-functions-of-python.git
[email protected]:qitu1024/built-in-functions-of-python.git
qitu1024
built-in-functions-of-python
Python的内置函数
master

搜索帮助