类的创建和实例的创建
class Dog(object):
nums = 100
__gender = "nan"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(f"{self.name} is eating")
def __set_gender(self, gender):
self.__gender = gender
print(f"{self.__gender}")
def set_gender(self):
self.__set_gender("女")
@classmethod
def set_nums(cls, nums):
cls.nums = nums
@staticmethod
def hello_world():
print("Hello world! I am a Dog!")
def __str__(self):
return f"My name is {self.name}, age is {self.age}, gender is {self.__gender}"
def __del__(self):
print("我被删除了~")
dog = Dog("Kate", 5)
dog.set_gender()
print(dog)
dog.__del__()
dog.test1 = "hello"
print(dog.test1)
Dog.test1 = "world"
print(Dog.test1)
- (object)代表继承自object类(基类),() == (object)
- 类的命名尽量首字母大写,实例的命名尽量首字母小写
- self代表的是实例的引用,也就是说self.name 就表示这个实例的name属性
- cls代表的是类的引用,也就是说 cls.nums 就表示这个类的nums属性
- 实例可以调用实例方法、类方法,实例属性和类属性,类只能调用类属性和类方法
属性
实例属性
- self.name 就是实例属性(第一次出现则代表创建,可以在类外部创建)
类属性
- nums 就是类属性
- cls.nums 就是类属性(第一次出现则创建,可以在类外部创建)
方法
魔法方法
__init__
__str__
- 没法打印类
- 打印实例时自动调用的方法,会自动返回 return 中的内容,一般会进行重写
__del__
实例方法
- 类中的方法都需要传入一个self或者cls,self和cls的名字可以改,但要保证后面是同样的名字
类方法
- 被@classmethod修饰的则是类方法
- 只能通过类去访问,只能访问类属性、类方法和静态方法
静态方法
- 被@staticmethod修饰的则是静态方法
- 可以通过类和对象去访问,只能访问类属性和静态方法
私有属性 / 方法
- 任何前面加上__的属性和方法就代表私有化,只能在类内部进行访问