下面通过代码定义一个最简单的类来理解类和对象
# 定义最简单的类
class Dog():
# 类属性
name = "小胡"
sex = "公"
# 方法
def eat(self):
print(self.name,'爱吃肉.....')
def say(self):
print('fahuo.....')
# 创建对象,相当于创建了两条狗
dog = Dog()
dog1 = Dog()
# 访问类中的属性
print(dog.name)
print(dog.sex)
# 访问类中的方法
dog.eat()
dog.say()
先看下面的代码示例:
class GirlFriend():
# 构造函数 __init__() 参数是对象相关的属性
def __init__(self,name,age):
# 对象的属性
self.name = name
self.age = age
print('构造函数的触发时机是:当创建完对象后,给对象传输属性时自动触发')
# 对象的方法
def say(self):
print(self.name,'喊文豹,来啊来啊.......')
def sing(self):
print('唱歌给豹哥听......')
# 析构函数
def __del__(self):
print('我的触发时机是:当对象被销毁的时候,自动触发....')
# 创建对象
girl = GirlFriend("小红",18)
girl1 = GirlFriend('小兰',22)
print(girl.name)
print(girl.age)
print(girl1.name)
print(girl1.age)
girl = GirlFriend("小红",18)
创建对象的时候会同时执行构造函数__init__ self.__age = 18
def __kiss(self):
get 函数 和 set 函数并不是系统的函数,而是自己定义的. 为了和封装的概念相吻合.一般会设置为 getXXX 和 setXXX,直接代码演示怎么通过get和set来访问和设置类的属性和方法
class Girl():
# 构造函数
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
# age为私有属性
self.__age = age
# 通过get函数访问私有属性,命名规则: get + 私有属性的名字(首字母大写)
def getAge(self):
return self.__age
# 通过set函数设置私有属性,命名规则: set + 私有属性的名字(首字母大写)
def setAge(self,age):
self.__age = age
# 创建对象
girl = Girl('兰兰','女',23)
print(girl.name)
print(girl.sex)
#上面的两个属性都不是私有属性,访问正常没问题
# 访问私有属性
# print(girl.__age) #这里的__age是私有属性,类外部无法正常访问
print(girl.getAge()) # 23 //通过类内部的getAge函数来访问
# 设置私有属性
girl.setAge(34)
print(girl.getAge()) # 34
class Girl():
# 构造函数
def __init__(self,name,age):
self.name = name
# 私有属性
self.__age = age
# 通过装饰器的方式访问私有属性 相当于 getAge
@property
def age(self):
return self.__age
# 通过装饰器设置私有属性 语法:@ + 私有属性名 + setter 相当于 setAge
@age.setter
def age(self,age):
self.__age = age
# 创建对象
girl = Girl('花花',25)
# 通过装饰器的方式在类的外部直接访问私有属性
print(girl.age)
# 通过装饰器的方式在类的外部设置私有属性
girl.age = 34
print(girl.age)
__name__
: 通过类名访问,获取类名字符串.不能通过对象获取,会报错__dict__
:获取类相关的信息(类方法\静态方法\成员方法等等) 返回的是一个字典, 通过对象访问获取的是该对象的信息,返回的是一个字典__base__
: 通过类名访问,获取的是该类的父类. 返回是一个元组class Ball():
# 构造函数
def __init__(self,name,weight):
self.name = name
self.weight = weight
# 创建对象
ball = Ball('篮球','0.5')
# 通过类名访问 __name__
# print(Ball.__name__) # Ball
# 不能通过对象访问 __name__ 会报错
# print(ball.__name__)
# 通过类名访问 __dict__ 返回的是一个字典
# print(Ball.__dict__)
# 通过对象访问 __dict__ 返回的是一个字典
# print(ball.__dict__) # {'name': '篮球', 'weight': '0.5'}
# 通过类名访问 __base__
# print(Ball.__base__) #
__str__
的触发时机是: 当打印对象的时候自动触发.一般是以字符串的形式返回相关的信息.必须使用return 关键字. __repr__ ()
的作用和 __str__()
类似.当两者都存在的时候,会触发 __str__
class Person():
# 构造函数
def __init__(self,name,age):
self.name = name
self.age = age
def swim(self):
print('游泳的方法')
'''
def __str__(self):
return f"姓名:{self.name},年龄:{self.age}"
'''
def __repr__(self):
return f"姓名:{self.name},年龄:{self.age}"
# 创建对象
person = Person('三哥',23)
print(person) # 姓名:三哥,年龄:23
__repr__
函数,当同时存在__repr__
和 __str__()
的话会执行 __str__()