1.类的定义
calss 类名:
类体
在python中使用class关键字来定义类,定义类时需要注意以下几个事项:
(1)类代码块以class关键字开头,代表定义类。
(2)class之后是类名,这个名字由用户自己指定,命名规则一般是多个单词组成的名称,每个单词除了第一个字母大写之外,其余字母均为小写,class和类名中间要有空格。
(3)类名后加冒号,类体由缩进的语句块组成,定义在类体内的元素都是类的成员。类的成员分为两种类型:描述状态的数据成员(也称属性)和描述操作的函数成员(也称方法)。
(4)一个类通常包含一种特殊的方法:__init__()。这个方法被称为初始化方法,又称为构造方法,它在创建和初始化一个新对象时被调用,初始化方法通常被设计用于完成对象的初始化工作。方法的命名也是符合驼峰命名规则,但是方法的首字母小写。
2.创建类的对象
对象名=类名(参数列表)
3.添加和获取对象属性
1).在类的外部
添加:对象名.属性名=值
获取:对象名.属性名
创建对象后,我们对其中一个对象添加实例属性,其他对象不发生变化
class Person(object):
def eat(self):
print('早饭吃了油条和包子,血糖110')
p1 = Person()
p1.name = 'xiaoming'
print(p1.name)
p2.age = 18
p1.name = 'xiaowang'
print(p1.name)
print(p1.__dict__)
del p1.name
print(p1.name)
2).在类的外部
添加:self.属性名 = 值
获取:self.属性名
class Person(object):
def add_attr(self):
self.name = 'xiaoming'
self.age = 19
self.gender = '女'
p1 = Person()
p1.add_attr()
print(p1.name, p1.age, p1.gender)
p2 = Person()
p1.name = 'xiaobai'
print(p1.name) # Rose
4.init方法
class testClass:
def __init__(self, name, gender):
self.Name = name
self.Gender = gender
print('hello')
t1 = testClass('aa', 'bb')
print(t1.Name)
print(t1.Gender)
5.私有方法和私有属性
在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法
class Women:
# 定义属性和方法时,属性名或方法名前增加两个下划线__表示私有属性或私有方法
def __init__(self, name):
self.name = name # 公有属性,外界可以直接访问
self.__age = 19 # 私有属性,外界及其子类不能直接访问
# 私有方法,外界不能直接访问
def __secret(self):
# 对象内部可以直接访问对象的私有属性
print("%s 的年龄是 %d" % (self.name, self.__age))
xiaowang = Women("小王")
print(xiaowang._Women__age)
xiaowang._Women__secret()
6.继承
1)、子类继承父类的成员变量和成员方法
2)、子类不继承父类的构造方法,能够继承父类的析构方法
3)、子类不能删除父类的成员,但可以重定义父类成员
4)、子类可以增加自己的成员
class Person():
def __init__(self, name, age, sex):
self.name = "xiaowang"
self.age = '19'
self.sex = sex
def talk(self):
print("I want to talk with you!!")
class Chinese(Person):
def __init__(self, name, age, sex, language):
Person.__init__(self, name, age, sex)
self.age = age
self.language = "chinese"
def talk(self):
print("我说的是普通话!!")
Person.talk(self)
obj = Chinese("xiaobai",'19','male',"普通话")
print(obj.name)
print(obj.age)
print(obj.language)
obj.talk()
7.多态
多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作
class Animal(object):
def eat(self) :
print('Animal eat something')
class Dog(Animal):
def eat(self) :
print('Dog eats meat')
class Cat(Animal):
print('Cat eats fish')
animal = Animal()
dog = Dog()
cat = Cat()
animal.eat()
dog.eat()
cat.eat()
8.类方法
class Man:
id = 0 # 类变量
def __init__(self, name):
self.name = name
self.id = self.id_number()
@classmethod
def id_number(cls):
cls.id += 1
return cls.id
a = Man('A')
print(a.id)
b = Man('B')
print(b.id)
9.对象方法
在class中面向对象的方法,即默认参数为self的方法,该类方法只能被实例化的对象调用,类名不能调用
class Student:
# 对象方法,只能被实例调用,不能被类调用
def __init__(self, name, age):
self.name = name
self.age = age
# 对象方法,只能被实例调用,不能被类调用
def get_email(self):
return self.name + str(self.age) +"@School.com"
stu1 = Student("xiaowang",19) # 生成实例
print(stu1.get_email()) # 实例调用该方法
print(Student.get_email()) # 类名调用,会出错
10.静态方法
静态方法可以理解为普通的方法或函数,其没有默认参数,修饰器为@staticmethod.
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def get_email(self):
return self.name + str(self.age) +"@School.com"
@classmethod
def from_string(cls, stu_string):
name, age = stu_string.split('-')
return cls(name, age)
@staticmethod
def is_workday(day):
if day.weekday() == 6 or day.weekday ==7:
return False
return True
from datetime import datetime
day = datetime(2022,5,24)
print(Student.is_workday(day))