👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。
👋大家好!我是你们的老朋友Java学术趴。在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。
这个self是自定义的,完全可以换成别的变量名
下面是几种常见的魔术方法:
# 类的全部组成
class Animal(object):
# 给init函数传递指定的参数。这个方法相当于Java的构造方法
# 这个方法是在类实例化对象的时候自动调用的
def __init__(self, name, age, type):
self.name = name
self.age = age
self.type = type
# 这个方法相当于Java中在实体类中声明的 toString() 方法
def __str__(self):
"""
指定打印对象的格式,声明这个方法后,在打印对象的时候就不是地址,
而是这个方法中指定的格式
:return: 对象的信息
"""
return '名字:{},年龄:{},类型{}'.format(self.name, self.age, self.type)
def eat(self, food):
"""
这个函数中的 self 相当于是Animal这个类。存在这个类中的所有属性
定义在类的实例方法中的属性称为实例属性
"""
# 类中的实例方法只能访问到类中的实例属性
print('小猫的年龄是:{},喜欢的食物是:{}'.format(self.age, food))
# print(age),在实例方法中不能直接访问到类属性
pass
pass
# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
print(cat)
# 名字:花花,年龄:3,类型虎斑
复制代码
# 类的全部组成
class Animal(object):
# 给init函数传递指定的参数。这个方法相当于Java的构造方法
# 这个方法是在类实例化对象的时候自动调用的
def __init__(self, name, age, type):
self.name = name
self.age = age
self.type = type
# 这个方法相当于Java中在实体类中声明的 toString() 方法
def __str__(self):
"""
指定打印对象的格式,声明这个方法后,在打印对象的时候就不是地址,
而是这个方法中指定的格式
:return: 对象的信息
"""
return '名字:{},年龄:{},类型{}'.format(self.name, self.age, self.type)
# 这个方法是在创建实例对象的时候执行的,每调用一次就会生成一个新的对象 cls 就是class的缩写
# 在我们没有写这个方法的时候,python在创建类实例的时候会自动调用这个方法,
# 写了这个方法之后就调用这个方法
# cls参数此时代表的就是类:Animal
def __new__(cls, *args, **kwargs):
"""
创建类实例对象的方法
使用场景:可以控制创建对象的一些属性限定,经常用来做单列模式的时候使用
:param args:
:param kwargs:
"""
print('=====__new__()=========')
return object.__new__(cls) # 这里是真正创建对象实例的
def eat(self, food):
"""
这个函数中的 self 相当于是Animal这个类。存在这个类中的所有属性
定义在类的实例方法中的属性称为实例属性
"""
# 类中的实例方法只能访问到类中的实例属性
print('小猫的年龄是:{},喜欢的食物是:{}'.format(self.age, food))
# print(age),在实例方法中不能直接访问到类属性
pass
pass
# 定义动物的实例对象
cat = Animal('花花', '3', '虎斑')
print(cat)
# =====__new__()=========a
# 名字:花花,年龄:3,类型虎斑
复制代码
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。