#! /usr/bin/env python
# -*- coding:utf-8 -*-
# 一切事物皆对象。
# 面向对象编程
# 定义: class 类名:
# def 方法(self,参数。。。):
# 。。。
# 使用:类名创建对象
# 调用类中的方法时,self就是类本身(对象),一个形参,python内部传递
# 面向对象编程特征:封装、继承、多态
# 1.封装:创建类对象时自动执行类的__init__方法,所以在此方法中完成具体封装的操作
# 即使用构造方法进行初始化
class stu:
def __init__(self,sex):
self.name = "jerry"
self.sex = sex
stu1 = stu("boy")
stu2 = stu("Gral")
print(stu1.name)
print(stu2.name)
print(stu2.sex)
# 2.继承: 子类拥有父类所有的功能
# 子类中有父类同个功能时,即子类重写了父类此功能
# 可以多继承(java没有啊,好厉害):当继承的多个父类中有同一功能,优先使用继承顺序在前的
# 若 A(B,C),B(D),C(E),功能查找顺序为 A-B-D-C-E
#
class Person:
def sm(self):
print(self.Name + "是个中国人")
class student(Person):
def __init__(self,name,sex,age):
self.Name = name
self.Sex = sex
self.Age = age
def call(self):
print("年龄:"+self.Age + ",性别:" + self.Sex)
tom = student("Tom","男",‘18‘)
tom.sm()
tom.call()
class China:
def sm(self):
print(self.Name + "是炎黄子孙")
class People(China,Person):
def __init__(self,name,sex,age):
self.Name = name
self.Sex = sex
self.Age = age
def call(self):
print("年龄:"+self.Age + ",性别:" + self.Sex)
www = People("Rose","女",‘20‘)
www.sm()
# 3.多态:
# python 不支持重载(方法名相同,参数不同)
# 4.查看类对象中是否有某成员
r = hasattr(People,‘sm‘) print(r)
# 5.利用反射查找成员
# 导入模块 modul = __import__(‘People‘,fromlist=True) #在模块中找到类 class_name = getattr(modul,‘China‘) #根据类创建对象 obj = class_name(‘山东‘,‘Tom‘) #在对象找到方法并执行 fuc = getattr(obj,‘sm‘) fuc()
# 6.静态成员变量:将类对象中共同的东西保存一份在类中,使用类访问
# 静态方法 @staticmethod,使用类访问
class province:
country = "China" # 静态属性
def __init__(self,name):
self.Name = name
# 静态方法
@staticmethod
def say():
print("www.baidu.com")
# 类方法(参数为当前类的类名)
@classmethod
def show(cls):
print("sino",cls)
pro1 = province("shandong")
print(pro1.country)# 使用对象访问静态属性
province.say()# 使用类访问静态方法
province.show()# 使用类访问类方法
# 7.修饰符:两种,公有和私有
# 私有:前面加上两个下划线,可以在类内部被调用
class Foo:
ox = "www" # 公有静态属性
__xo = "mmm" # 私有静态属性
def __init__(self):
self.name = "ketty"
def say(self):
print(self.__xo)
def __call__(self, *args, **kwargs):
print("call")
return 1
def __getitem__(self, item):
print(item, type(item))
def __setitem__(self, key, value):
print(key,value)
def __delitem__(self, key):
print(‘del‘,key)
def __iter__(self):
yield 1
yield 2
yield 3
obj = Foo()
print(Foo.ox)
obj.say()
# 8.特殊方法:__init__; __del__; __call__;
# __getitem__; __setitem__; __del__;
r = Foo()() # 先执行__init__方法,再执行__call__方法,将__call__方法的返回值给r m = Foo() m[‘value‘] #对象后面加中括号,执行__getitem__方法 m["key"] = 123 # 执行对象的__setitem__方法 del m[‘key‘] # 执行对象的__delitem__方法 m[1:7:2] # 对象切片也是调用__getitem__方法,将1:7:2封装成一个slice对象传入方法 # 同理 切片赋值调用__setitem__,切片删除调用__delitem__ m[1:3] = [1,2,3]
# 9.__dict__ 获取对象中的成员
print(Foo.__dict__) # 类Foo中的成员:方法和属性
obj = Foo()
print(obj.__dict__) # 对象obj中的成员
# 10. __iter__: 如果执行for循环对象时,自动会执行对象的__iter__方法
# 若能迭代成功,表明对象中实现了__iter__方法
n = Foo()
for i in n:
print(i)
原文:https://www.cnblogs.com/wuxinyan/p/9028187.html