python类和对象

98 阅读3分钟

python类

类是由属性和行为组成的,属性称为成员变量,行为称为成员方法。属性和方法又类似名词和动词,名词便是变量,用来定义类的属性,动词便是方法,用来针对类执行不同的操作。

语法:

class 类名:
    属性
    行为

python对象

对象就是通过类,并继承类的属性和行为。

  1. 创建一个类并使用。
class people:
    name = None
    age = None
    hobby = None

# 创建一个对象
peop1 = people()
peop1.name = "小明",
peop1.age = 18
peop1.hobby = "敲代码"
print(type(peop1))  # <class '__main__.people'>
print(peop1.name)  # ('小明',)
print(peop1.age)  # 18
print(peop1.hobby)  # 敲代码
  1. 在类中定义类的行为(函数)。

在类中定义方法和定义函数基本一致,但是也有一些区别,语法 def 方法名(self, 形参1,...形参n): self是必传的,但是对其他参数并不影响。

self:

  • 它用来表示类对象自身。
  • 当我们使用类对象调用方法的时候,self会自动被python传入。
  • 在方法内部,想要访问类的成员变量,必须使用self。
class people:
    name = None
    age = None
    hobby = None

    def intr(self):
        print(f"你好,我叫{self.name},今年{self.age}岁了,我的爱好是:{self.hobby}")

    def occupation(self, msg):
        print(f"大家好,我是工作时长两年半的{msg}!")

cxk = people()
cxk.name = "鸡哥"
cxk.age = 18
cxk.hobby = "打篮球"
cxk.intr()                # 你好,我叫鸡哥,今年18岁了,我的爱好是:打篮球
cxk.occupation("攻城狮")  # 大家好,我是工作时长两年半的攻城狮!

通过继承类实现的对象是互不影响的。

# 通过类构建的对象是互不干扰的.
hero = people()
hero.name = "王拿铁"
hero.age = 19
hero.hobby = "敲代码"
hero.intr()                # 你好,我叫王拿铁,今年19岁了,我的爱好是:敲代码
hero.occupation("攻城狮")  # 大家好,我是工作时长两年半的攻城狮!

构造方法

python类中可以使用__init__()方法,称之为构造方法

  • 对象的参数会依次传给构造方法,然后依次给成员变量赋值
  • 在创建类对象(构造类) 的时候,会自动执行
  • 在创建类对象(构造类) 的时候,将传入的参数自动传递给__init__方法使用
class people:
    def __init__(self, name, age, hobby):
        self.name = name
        self.age = age
        self.hobby = hobby

    def intr(self):
        print(f"你好,我叫{self.name},今年{self.age}岁了,我的爱好是:{self.hobby}")

    def occupation(self, msg):
        print(f"大家好,我是工作时长两年半的{msg}!")
        
cxk = people("鸡哥", 18, "打篮球") # 参数会依次传入构造方法中,成为类的属性
cxk.intr()                        # 你好,我叫鸡哥,今年18岁了,我的爱好是:打篮球
cxk.occupation("攻城狮")           # 大家好,我是工作时长两年半的攻城狮!

私有变量和私有方法

私有变量或者私有方法,在名称前使用双下滑线定义,对于私有属性:外部不可以访问,会报错,可以操作,但无效。对于私有方法,外部不可以操作,会报错。私有变量只能在类内部使用,

class people:
    __age = 19

    def __sayHi(self):
        print("你好")

    def sayHello(self):
        print(self.__age)
        self.__sayHi()

cxk = people()
# print(cxk.__age)    # AttributeError: 'people' object has no attribute '__age'
# cxk.__sayHi()       # AttributeError: 'people' object has no attribute '__sayHi'
cxk.sayHello()

扩展:

如果参数有很多,可使用如下方式传递,但有一定的使用性问题,传递的参数必须是以键值对方式传递的,且在函数内无法提前预知会设置的属性。

setattr() 是Python中的一个内置函数,用于设置对象的属性值。它接受三个参数:第一个参数是对象,第二个参数是字符串形式的属性名或方法名,第三个参数是要设置的属性或方法的值或引用。

class people:

    def __init__(self, **kwargs):
        for item in kwargs:
            setattr(self, item, kwargs[item])


cxk = people(name="鸡哥", age=18, hobby="打篮球")