类的基本使用
类的定义
- 语法:class 类名() : 代码块
创建对象
语法:对象名 = 类名 ( )
class MyClass():
pass
object1 = MyClass()
print(object1, type(object1))
# ---------- 输出 ----------
# <__main__.MyClass object at 0x000002469E4E81D0> <class '__main__.MyClass'>
isinstance(object, className)
- 用于判断该对象是否属于该类 ( 或其父类 ) ;若是则返回 True,否则返回 False
class MyClass():
pass
object1 = MyClass()
print(isinstance(object1, MyClass))
# ---------- 输出 ----------
# True
类的简介
类是 type 类型的对象
class MyClass():
pass
print(id(MyClass), type(MyClass))
# ---------- 输出 ----------
# 3078569221256 <class 'type'>
类的种类
自定义的类 & 系统自带的类 (eg:int、float、list、dict…)
print(int)
class MyClass():
pass
print(MyClass)
# ---------- 输出 ----------
# <class 'int'>
# <class '__main__.MyClass'>
数据 ( 属性 ) & 行为 ( 方法 )
(1)数据 ( 属性 )
类的属性
- 类的数据 ( 属性 ) :直接在类中用变量创建。
class Person():
name = 'superman'
- 该类的数据 ( 属性 ) 是该类的对象共同拥有的,即该类的对象都可以调用该类的数据 ( 属性 ),但是无法修改。
- 类属性可以通过类名访问、修改
class Animals(object):
name = 'animals'
print(Animals.name)
Animals.name = 'duck'
print(Animals.name)
# ---------- 输出 ----------
# animals
# duck
对象的属性
- 对象的数据 ( 属性 ) :通过类的对象添加的属性。
- 对象的数据 ( 属性 ) 只能通过该对象进行访问、修改。
(2)行为 ( 方法 )
对象的行为
- 直接在类中用函数创建
- 对象调用行为函数时,把自己作为实参传递给行为函数,所以行为函数默认带有一个 self 形参。
- 通过类名调用行为函数时,需要填写类的对象作为实参
class Person(object):
def speak(self):
print('i am a handsome boy')
person1 = Person()
person1.speak() # 通过对象调用行为函数
Person.speak(person1) # 通过类名调用行为函数
# ---------- 输出 ----------
# i am a handsome boy
# i am a handsome boy
类的行为
- 在类中以 @classmethod 来修饰的行为 ( 方法 )
- 类的行为 ( 方法 ) 的第一个形参是 cls,cls 就相当于当该类名。其实就是类把自己作为实参传递给行为函数了。
- 类的行为 ( 方法 ) 是所有对象共同拥有的,所以它不仅可以通过类名去调用,还可以通过对象去调用。
class Person(object):
@classmethod
def speak(cls):
print('i am a handsome boy')
person1 = Person()
person1.speak()
Person.speak()
# ---------- 输出 ----------
# i am a handsome boy
# i am a handsome boy
(3)静态行为 ( 方法 )
- 用 @staticmethod 修饰的行为 ( 方法 ) ,就是静态行为 ( 方法 )
- 静态方法不需要默认形参,可以通过类名或对象调用
class Person(object):
@staticmethod
def speak():
print('i am a handsome boy')
person1 = Person()
person1.speak()
Person.speak()
# ---------- 输出 ----------
# i am a handsome boy
# i am a handsome boy
- 类里面的行为函数默认只能调用类的属性。
添加 / 修改 对象的数据 ( 属性 )
添加数据的语法:对象名 . 属性名 = 属性值
class MyClass():
pass
object1 = MyClass()
object1.name = 'superman'
print(object1.name)
# ---------- 输出 ----------
# superman
- 当添加的属性名已存在时,添加的属性值会覆盖原来的属性值
class Person():
name = 'superman'
object1 = Person()
object1.name = 'monster'
print(object1.name)
# ---------- 输出 ----------
# monster
- 当重复添加相同属性时,后面写的属性值会覆盖前面写的属性值
class Person():
name = 'superman'
object1 = Person()
object1.name = 'monster'
object1.name = 'person'
print(object1.name)
# ---------- 输出 ----------
# person
__ init __ 函数
即特殊方法,也叫魔法方法
- 类的对象在创建时会自动先执行类的非函数内容,然后执行 __ init __ 函数内容
class Preson():
print('这是类的非函数内容')
def __init__(self, PresonName):
self.name = PresonName
print(f'在__init__函数里面输出{self.name}')
def speak(self):
print('这里是类里面的函数内容')
object1 = Preson('superman')
print(f'在类外面输出{object1.name}')
# ---------- 输出 ----------
# 这是类的非函数内容
# 在__init__函数里面输出superman
# 在类外面输出superman
- 对象通过 __ init __ 函数创建的属性,是该对象的特有属性,不是类的属性
class Preson():
def __init__(self, PresonName):
self.name = PresonName
object1 = Preson('superman')
print(object1.name)
# ---------- 输出 ----------
# superman