PythonClassChy/python27Class/pythonLearningNotes/flora_0229_notes.txt

244 lines
6.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=================================
Notes
Author: Flora Chen
-_- -_- -_- -_- -_- -_- -_- -_-
=================================
******面向对象******
******类class******
1. 类的定义
关键字class
语法:
class 类名:
# 类里面的代码
类名命名规范遵循标识符的命名规范风格采用大驼峰命名法例如CatType
示例:
class Cat:
pass
class Dog:
pass
class TestCase:
pass
2. 通过类创建对象
对象 = 类名()
关于对象,有人叫对象,也有人叫实例。
通过类来创建对象(实例化对象)。可以创建多个对象,每个对象的内存地址都不一样。
示例:
class Cat:
pass
# 通过类来创建对象(实例化对象)。可以创建多个对象,每个对象的内存地址都不一样。
kitty = Cat()
print(id(kitty)) # 输出结果2108715911296
coffee = Cat()
print(id(coffee)) # 输出结果2108716016880
******类属性和实例属性******
1. 类属性
这一类事物拥有的共同特征,我们通常会定义为类属性。
在类里面直接定义的变量,叫做类属性。
类属性:可以通过类和对象去访问
有两种方式可以访问类属性:
通过对象访问类属性:对象名.属性名。
通过类访问属性:类名.属性名。
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
# 通过对象访问类属性:对象名.属性名
kitty = Cat()
print(kitty.leg) # 输出结果:四条腿
coffee = Cat()
print(coffee.tail) # 输出结果:长尾巴
# 通过类访问属性:类名.属性名
print(Cat.leg) # 输出结果:四条腿
2. 实例属性
每个对象的属性值都有可能不一样,就应该定义为实例属性(对象属性)。
实例属性的定义:对象.属性名=属性值。
对象属性(实例属性):只能对象自己能用。
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
# 实例化对象
kitty = Cat()
coffee = Cat()
# 给对象添加属性
kitty.name = 'kitty'
kitty.age = 2
coffee.name = 'coffee'
coffee.age = 3
# 通过对象访问对象属性:对象名.属性名
print(kitty.name) # 输出结果kitty
print(kitty.age) # 输出结果2
print(coffee.name) # 输出结果kitty
print(coffee.age) # 输出结果3
3. 关于如何在类里面定义对象属性
定义在类里面的函数叫方法。
__init__方法
初始化方法;
在创建对象的时候,会自动调用执行里面的代码。
关于方法中的第一个参数selfself代表对象不用手动传参调用该方法时会自动传入。
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
def __init__(self):
# 初始化方法
print('这里是打印self', id(self), self)
print('这个是__init__方法在调用')
kitty = Cat() # 输出结果这里是打印self 1396410304640 <__main__.Cat object at 0x00000145208A4880>
print('这里是打印kitty', id(kitty), kitty)
# 输出结果这里是打印self 1396410304640 <__main__.Cat object at 0x00000145208A4880>
print('----------------------')
coffee = Cat() # 输出结果这里是打印self 2197480466656 <__main__.Cat object at 0x000001FFA40AE8E0>
print('这里是打印coffee', id(coffee), coffee)
# 输出结果这里是打印coffee 1796880263392 <__main__.Cat object at 0x000001A25E68E8E0>
__init__方法的作用初始化对象属性
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
kitty = Cat('hello kitty', 1, 'female')
print(kitty.name)
coffee = Cat('coffee cat', 2, 'male')
print(kitty.age)
4. 类里面的方法
特征 + 行为
特征:属性(类属性和实例属性)
行为:方法(类方法和实例方法)
方法的本质就是类里面的函数。
实例方法:
第一个参数时self, self代表的是对象本身哪个对象调用该方法self就代表哪个对象。
实例方法只能通过对象去调用。
实例方法不能通过类去调用,调用会报错。
类方法:
@classmethod进行装饰标识
第一个参数时cls cls代表的是类本身。
可以通过类和对象去调用。
静态方法:
@staticmethod进行装饰
可以通过类和对象去调用。
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 实例方法
def skill_01(self, skill_name):
print('{}会{}'.format(self.name, skill_name))
# 实例方法
def skill_02(self):
print('{}会爬树!'.format(self.name))
@classmethod
def class_method(cls):
print('这是一个类方法!')
print('打印cls', cls)
@staticmethod
def static_method():
print('这是一个静态方法!')
# 通过对象调用实例方法
kitty = Cat('hello kitty', 1, 'female')
kitty.skill_01('跳舞')
coffee = Cat('coffee cat', 2, 'male')
coffee.skill_02()
# 通过类迪调用实例方法
# Cat.skill_02() # 报错TypeError: skill_02() missing 1 required positional argument: 'self'
print('-------------------------')
# 通过类访问类方法:类名.类方法名
Cat.class_method()
# 通过对象调用类方法:对象名.类方法名
kitty.class_method()
print('-------------------------')
# 通过类访问静态方法:类名.类方法名
Cat.static_method()
# 通过对象调用静态方法:对象名.类方法名
kitty.static_method()
5. 关于类方法,静态方法,实例方法的应用场景
类方法:在方法内部只会使用到类属性。
静态方法:方法内部既不会使用类相关的属性和方法, 也不会使用实例(对象)相关的属性和方法。
实例方法:在方法内部会使用到对象相关的属性或方法,那么适合定义为对象方法。
示例:
class Cat:
# 类属性
leg = '四条腿'
tail = '长尾巴'
def __init__(self, name, age, gender):
# 实例(对象)属性
self.name = name
self.age = age
self.gender = gender
# 实例方法
def skill_01(self):
print('{}会跳舞!'.format(self.name))
self.move()
def move(self):
print('快速移动')
# 类方法
@classmethod
def class_method(cls):
print('这是猫类的共同特征:{}{}'.format(cls.leg, cls.tail))
print('打印cls', cls)
#静态方法
@staticmethod
def static_method():
print('里面的代码和类和对象没有太多相关性!')
kitty = Cat('kitty', 1, 'female')
kitty.skill_01()